Eli Friedman | 3a594f4 | 2011-07-18 21:23:42 +0000 | [diff] [blame^] | 1 | ; RUN: llc < %s -march=ppc32 | FileCheck %s |
Evan Cheng | 8608f2e | 2008-04-19 02:30:38 +0000 | [diff] [blame] | 2 | |
Chris Lattner | b85e4eb | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 3 | define i32 @exchange_and_add(i32* %mem, i32 %val) nounwind { |
Eli Friedman | 3a594f4 | 2011-07-18 21:23:42 +0000 | [diff] [blame^] | 4 | ; CHECK: exchange_and_add: |
| 5 | ; CHECK: lwarx |
Chris Lattner | b85e4eb | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 6 | %tmp = call i32 @llvm.atomic.load.add.i32.p0i32(i32* %mem, i32 %val) |
Eli Friedman | 3a594f4 | 2011-07-18 21:23:42 +0000 | [diff] [blame^] | 7 | ; CHECK: stwcx. |
Chris Lattner | b85e4eb | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 8 | ret i32 %tmp |
Evan Cheng | 8608f2e | 2008-04-19 02:30:38 +0000 | [diff] [blame] | 9 | } |
| 10 | |
Chris Lattner | b85e4eb | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 11 | define i32 @exchange_and_cmp(i32* %mem) nounwind { |
Eli Friedman | 3a594f4 | 2011-07-18 21:23:42 +0000 | [diff] [blame^] | 12 | ; CHECK: exchange_and_cmp: |
| 13 | ; CHECK: lwarx |
Chris Lattner | b85e4eb | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 14 | %tmp = call i32 @llvm.atomic.cmp.swap.i32.p0i32(i32* %mem, i32 0, i32 1) |
Eli Friedman | 3a594f4 | 2011-07-18 21:23:42 +0000 | [diff] [blame^] | 15 | ; CHECK: stwcx. |
| 16 | ; CHECK: stwcx. |
Chris Lattner | b85e4eb | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 17 | ret i32 %tmp |
Evan Cheng | 8608f2e | 2008-04-19 02:30:38 +0000 | [diff] [blame] | 18 | } |
| 19 | |
Chris Lattner | b85e4eb | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 20 | define i32 @exchange(i32* %mem, i32 %val) nounwind { |
Eli Friedman | 3a594f4 | 2011-07-18 21:23:42 +0000 | [diff] [blame^] | 21 | ; CHECK: exchange: |
| 22 | ; CHECK: lwarx |
Chris Lattner | b85e4eb | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 23 | %tmp = call i32 @llvm.atomic.swap.i32.p0i32(i32* %mem, i32 1) |
Eli Friedman | 3a594f4 | 2011-07-18 21:23:42 +0000 | [diff] [blame^] | 24 | ; CHECK: stwcx. |
Chris Lattner | b85e4eb | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 25 | ret i32 %tmp |
Evan Cheng | 8608f2e | 2008-04-19 02:30:38 +0000 | [diff] [blame] | 26 | } |
| 27 | |
Chris Lattner | b85e4eb | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 28 | declare i32 @llvm.atomic.load.add.i32.p0i32(i32* nocapture, i32) nounwind |
| 29 | |
| 30 | declare i32 @llvm.atomic.cmp.swap.i32.p0i32(i32* nocapture, i32, i32) nounwind |
| 31 | |
| 32 | declare i32 @llvm.atomic.swap.i32.p0i32(i32* nocapture, i32) nounwind |