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 | ||||
Eli Friedman | de412c3 | 2011-09-26 21:30:17 +0000 | [diff] [blame] | 6 | %tmp = atomicrmw add i32* %mem, i32 %val monotonic |
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 | ||||
Eli Friedman | de412c3 | 2011-09-26 21:30:17 +0000 | [diff] [blame] | 14 | %tmp = cmpxchg i32* %mem, i32 0, i32 1 monotonic |
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 | ||||
Eli Friedman | de412c3 | 2011-09-26 21:30:17 +0000 | [diff] [blame] | 23 | %tmp = atomicrmw xchg i32* %mem, i32 1 monotonic |
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 | } |