Hal Finkel | 6871435 | 2013-03-27 13:20:52 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -mtriple=powerpc-apple-darwin -march=ppc32 | FileCheck %s |
Evan Cheng | 5102bd9 | 2008-04-19 02:30:38 +0000 | [diff] [blame] | 2 | |
Chris Lattner | 80ed9dc | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 3 | define i32 @exchange_and_add(i32* %mem, i32 %val) nounwind { |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 4 | ; CHECK-LABEL: exchange_and_add: |
Hal Finkel | 6871435 | 2013-03-27 13:20:52 +0000 | [diff] [blame] | 5 | ; CHECK: lwarx {{r[0-9]+}}, 0, {{r[0-9]+}} |
Eli Friedman | 6fb0c1e | 2011-09-26 21:30:17 +0000 | [diff] [blame] | 6 | %tmp = atomicrmw add i32* %mem, i32 %val monotonic |
Hal Finkel | 6871435 | 2013-03-27 13:20:52 +0000 | [diff] [blame] | 7 | ; CHECK: stwcx. {{r[0-9]+}}, 0, {{r[0-9]+}} |
Chris Lattner | 80ed9dc | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 8 | ret i32 %tmp |
Evan Cheng | 5102bd9 | 2008-04-19 02:30:38 +0000 | [diff] [blame] | 9 | } |
| 10 | |
Chris Lattner | 80ed9dc | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 11 | define i32 @exchange_and_cmp(i32* %mem) nounwind { |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 12 | ; CHECK-LABEL: exchange_and_cmp: |
Eli Friedman | 4d5532a | 2011-07-18 21:23:42 +0000 | [diff] [blame] | 13 | ; CHECK: lwarx |
Tim Northover | 420a216 | 2014-06-13 14:24:07 +0000 | [diff] [blame] | 14 | %tmppair = cmpxchg i32* %mem, i32 0, i32 1 monotonic monotonic |
| 15 | %tmp = extractvalue { i32, i1 } %tmppair, 0 |
Eli Friedman | 4d5532a | 2011-07-18 21:23:42 +0000 | [diff] [blame] | 16 | ; CHECK: stwcx. |
| 17 | ; CHECK: stwcx. |
Chris Lattner | 80ed9dc | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 18 | ret i32 %tmp |
Evan Cheng | 5102bd9 | 2008-04-19 02:30:38 +0000 | [diff] [blame] | 19 | } |
| 20 | |
Chris Lattner | 80ed9dc | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 21 | define i32 @exchange(i32* %mem, i32 %val) nounwind { |
Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 22 | ; CHECK-LABEL: exchange: |
Eli Friedman | 4d5532a | 2011-07-18 21:23:42 +0000 | [diff] [blame] | 23 | ; CHECK: lwarx |
Eli Friedman | 6fb0c1e | 2011-09-26 21:30:17 +0000 | [diff] [blame] | 24 | %tmp = atomicrmw xchg i32* %mem, i32 1 monotonic |
Eli Friedman | 4d5532a | 2011-07-18 21:23:42 +0000 | [diff] [blame] | 25 | ; CHECK: stwcx. |
Chris Lattner | 80ed9dc | 2011-06-18 06:05:24 +0000 | [diff] [blame] | 26 | ret i32 %tmp |
Evan Cheng | 5102bd9 | 2008-04-19 02:30:38 +0000 | [diff] [blame] | 27 | } |