| Michael Liao | da22b30 | 2013-03-06 00:17:04 +0000 | [diff] [blame] | 1 | ; RUN: llc -march=x86 -mattr=+cmov -mtriple=i386-pc-linux -verify-machineinstrs < %s | FileCheck %s -check-prefix=LINUX |
| Michael Liao | d5cac37 | 2013-03-07 01:01:29 +0000 | [diff] [blame] | 2 | ; RUN: llc -march=x86 -mattr=-cmov -mtriple=i386-pc-linux -verify-machineinstrs < %s | FileCheck %s -check-prefix=NOCMOV |
| Michael Liao | da22b30 | 2013-03-06 00:17:04 +0000 | [diff] [blame] | 3 | ; RUN: llc -march=x86 -mtriple=i386-macosx -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s -check-prefix=PIC |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 4 | |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 5 | @sc64 = external global i64 |
| 6 | |
| 7 | define void @atomic_maxmin_i6432() { |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 8 | ; LINUX: atomic_maxmin_i6432 |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 9 | %1 = atomicrmw max i64* @sc64, i64 5 acquire |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 10 | ; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 11 | ; LINUX: cmpl |
| 12 | ; LINUX: setl |
| 13 | ; LINUX: cmpl |
| 14 | ; LINUX: setl |
| 15 | ; LINUX: cmovne |
| 16 | ; LINUX: cmovne |
| 17 | ; LINUX: lock |
| 18 | ; LINUX-NEXT: cmpxchg8b |
| 19 | ; LINUX: jne [[LABEL]] |
| Michael Liao | d5cac37 | 2013-03-07 01:01:29 +0000 | [diff] [blame] | 20 | ; NOCMOV: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 21 | ; NOCMOV: cmpl |
| 22 | ; NOCMOV: setl |
| 23 | ; NOCMOV: cmpl |
| 24 | ; NOCMOV: setl |
| 25 | ; NOCMOV: jne |
| 26 | ; NOCMOV: jne |
| 27 | ; NOCMOV: lock |
| 28 | ; NOCMOV-NEXT: cmpxchg8b |
| 29 | ; NOCMOV: jne [[LABEL]] |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 30 | %2 = atomicrmw min i64* @sc64, i64 6 acquire |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 31 | ; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 32 | ; LINUX: cmpl |
| 33 | ; LINUX: setg |
| 34 | ; LINUX: cmpl |
| 35 | ; LINUX: setg |
| 36 | ; LINUX: cmovne |
| 37 | ; LINUX: cmovne |
| 38 | ; LINUX: lock |
| 39 | ; LINUX-NEXT: cmpxchg8b |
| 40 | ; LINUX: jne [[LABEL]] |
| Michael Liao | d5cac37 | 2013-03-07 01:01:29 +0000 | [diff] [blame] | 41 | ; NOCMOV: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 42 | ; NOCMOV: cmpl |
| 43 | ; NOCMOV: setg |
| 44 | ; NOCMOV: cmpl |
| 45 | ; NOCMOV: setg |
| 46 | ; NOCMOV: jne |
| 47 | ; NOCMOV: jne |
| 48 | ; NOCMOV: lock |
| 49 | ; NOCMOV-NEXT: cmpxchg8b |
| 50 | ; NOCMOV: jne [[LABEL]] |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 51 | %3 = atomicrmw umax i64* @sc64, i64 7 acquire |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 52 | ; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 53 | ; LINUX: cmpl |
| 54 | ; LINUX: setb |
| 55 | ; LINUX: cmpl |
| 56 | ; LINUX: setb |
| 57 | ; LINUX: cmovne |
| 58 | ; LINUX: cmovne |
| 59 | ; LINUX: lock |
| 60 | ; LINUX-NEXT: cmpxchg8b |
| 61 | ; LINUX: jne [[LABEL]] |
| Michael Liao | d5cac37 | 2013-03-07 01:01:29 +0000 | [diff] [blame] | 62 | ; NOCMOV: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 63 | ; NOCMOV: cmpl |
| 64 | ; NOCMOV: setb |
| 65 | ; NOCMOV: cmpl |
| 66 | ; NOCMOV: setb |
| 67 | ; NOCMOV: jne |
| 68 | ; NOCMOV: jne |
| 69 | ; NOCMOV: lock |
| 70 | ; NOCMOV-NEXT: cmpxchg8b |
| 71 | ; NOCMOV: jne [[LABEL]] |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 72 | %4 = atomicrmw umin i64* @sc64, i64 8 acquire |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 73 | ; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 74 | ; LINUX: cmpl |
| 75 | ; LINUX: seta |
| 76 | ; LINUX: cmpl |
| 77 | ; LINUX: seta |
| 78 | ; LINUX: cmovne |
| 79 | ; LINUX: cmovne |
| 80 | ; LINUX: lock |
| 81 | ; LINUX-NEXT: cmpxchg8b |
| 82 | ; LINUX: jne [[LABEL]] |
| Michael Liao | d5cac37 | 2013-03-07 01:01:29 +0000 | [diff] [blame] | 83 | ; NOCMOV: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 84 | ; NOCMOV: cmpl |
| 85 | ; NOCMOV: seta |
| 86 | ; NOCMOV: cmpl |
| 87 | ; NOCMOV: seta |
| 88 | ; NOCMOV: jne |
| 89 | ; NOCMOV: jne |
| 90 | ; NOCMOV: lock |
| 91 | ; NOCMOV-NEXT: cmpxchg8b |
| 92 | ; NOCMOV: jne [[LABEL]] |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 93 | ret void |
| 94 | } |
| 95 | |
| 96 | ; rdar://12453106 |
| 97 | @id = internal global i64 0, align 8 |
| 98 | |
| 99 | define void @tf_bug(i8* %ptr) nounwind { |
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 100 | ; PIC-LABEL: tf_bug: |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 101 | ; PIC: movl _id-L1$pb( |
| 102 | ; PIC: movl (_id-L1$pb)+4( |
| 103 | %tmp1 = atomicrmw add i64* @id, i64 1 seq_cst |
| 104 | %tmp2 = add i64 %tmp1, 1 |
| 105 | %tmp3 = bitcast i8* %ptr to i64* |
| 106 | store i64 %tmp2, i64* %tmp3, align 4 |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 107 | ret void |
| 108 | } |