Dan Gohman | 36a0947 | 2009-09-08 23:54:48 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -march=x86 |
Chris Lattner | dc21e16 | 2006-07-20 19:04:36 +0000 | [diff] [blame] | 2 | ; PR833 |
| 3 | |
Tanya Lattner | 6f729d6 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 4 | @G = weak global i32 0 ; <i32*> [#uses=3] |
Chris Lattner | dc21e16 | 2006-07-20 19:04:36 +0000 | [diff] [blame] | 5 | |
Tanya Lattner | 6f729d6 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 6 | define i32 @foo(i32 %X) { |
Chris Lattner | dc21e16 | 2006-07-20 19:04:36 +0000 | [diff] [blame] | 7 | entry: |
Tanya Lattner | 6f729d6 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 8 | %X_addr = alloca i32 ; <i32*> [#uses=3] |
| 9 | store i32 %X, i32* %X_addr |
| 10 | call void asm sideeffect "xchg{l} {$0,$1|$1,$0}", "=*m,=*r,m,1,~{dirflag},~{fpsr},~{flags}"( i32* @G, i32* %X_addr, i32* @G, i32 %X ) |
| 11 | %tmp1 = load i32* %X_addr ; <i32> [#uses=1] |
| 12 | ret i32 %tmp1 |
Chris Lattner | dc21e16 | 2006-07-20 19:04:36 +0000 | [diff] [blame] | 13 | } |
| 14 | |
Tanya Lattner | 6f729d6 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 15 | define i32 @foo2(i32 %X) { |
Chris Lattner | dc21e16 | 2006-07-20 19:04:36 +0000 | [diff] [blame] | 16 | entry: |
Tanya Lattner | 6f729d6 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 17 | %X_addr = alloca i32 ; <i32*> [#uses=3] |
| 18 | store i32 %X, i32* %X_addr |
| 19 | call void asm sideeffect "xchg{l} {$0,$1|$1,$0}", "=*m,=*r,1,~{dirflag},~{fpsr},~{flags}"( i32* @G, i32* %X_addr, i32 %X ) |
| 20 | %tmp1 = load i32* %X_addr ; <i32> [#uses=1] |
| 21 | ret i32 %tmp1 |
Chris Lattner | dc21e16 | 2006-07-20 19:04:36 +0000 | [diff] [blame] | 22 | } |
Tanya Lattner | 6f729d6 | 2008-03-25 04:26:08 +0000 | [diff] [blame] | 23 | |