| Tim Northover | 277066a | 2014-07-01 18:53:31 +0000 | [diff] [blame] | 1 | ; RUN: llc -march=x86 -mattr=+cmov,cx16 -mtriple=i386-pc-linux -verify-machineinstrs < %s | FileCheck %s -check-prefix=LINUX |
| 2 | ; RUN: llc -march=x86 -mattr=cx16 -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] | 3 | |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 4 | @sc64 = external global i64 |
| 5 | |
| 6 | define void @atomic_maxmin_i6432() { |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 7 | ; LINUX: atomic_maxmin_i6432 |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 8 | %1 = atomicrmw max i64* @sc64, i64 5 acquire |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 9 | ; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 10 | ; LINUX: cmpl |
| Tim Northover | 277066a | 2014-07-01 18:53:31 +0000 | [diff] [blame] | 11 | ; LINUX: seta |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 12 | ; LINUX: cmovne |
| 13 | ; LINUX: cmovne |
| 14 | ; LINUX: lock |
| 15 | ; LINUX-NEXT: cmpxchg8b |
| 16 | ; LINUX: jne [[LABEL]] |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 17 | %2 = atomicrmw min i64* @sc64, i64 6 acquire |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 18 | ; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 19 | ; LINUX: cmpl |
| Tim Northover | 277066a | 2014-07-01 18:53:31 +0000 | [diff] [blame] | 20 | ; LINUX: setb |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 21 | ; LINUX: cmovne |
| 22 | ; LINUX: cmovne |
| 23 | ; LINUX: lock |
| 24 | ; LINUX-NEXT: cmpxchg8b |
| 25 | ; LINUX: jne [[LABEL]] |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 26 | %3 = atomicrmw umax i64* @sc64, i64 7 acquire |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 27 | ; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 28 | ; LINUX: cmpl |
| Tim Northover | 277066a | 2014-07-01 18:53:31 +0000 | [diff] [blame] | 29 | ; LINUX: seta |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 30 | ; LINUX: cmovne |
| 31 | ; LINUX: cmovne |
| 32 | ; LINUX: lock |
| 33 | ; LINUX-NEXT: cmpxchg8b |
| 34 | ; LINUX: jne [[LABEL]] |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 35 | %4 = atomicrmw umin i64* @sc64, i64 8 acquire |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 36 | ; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]] |
| 37 | ; LINUX: cmpl |
| Tim Northover | 277066a | 2014-07-01 18:53:31 +0000 | [diff] [blame] | 38 | ; LINUX: setb |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 39 | ; LINUX: cmovne |
| 40 | ; LINUX: cmovne |
| 41 | ; LINUX: lock |
| 42 | ; LINUX-NEXT: cmpxchg8b |
| 43 | ; LINUX: jne [[LABEL]] |
| 44 | ret void |
| 45 | } |
| 46 | |
| 47 | ; rdar://12453106 |
| 48 | @id = internal global i64 0, align 8 |
| 49 | |
| 50 | define void @tf_bug(i8* %ptr) nounwind { |
| Stephen Lin | d24ab20 | 2013-07-14 06:24:09 +0000 | [diff] [blame] | 51 | ; PIC-LABEL: tf_bug: |
| Tim Northover | 277066a | 2014-07-01 18:53:31 +0000 | [diff] [blame] | 52 | ; PIC-DAG: movl _id-L1$pb( |
| 53 | ; PIC-DAG: movl (_id-L1$pb)+4( |
| Evan Cheng | 3903e1b | 2012-10-09 23:48:33 +0000 | [diff] [blame] | 54 | %tmp1 = atomicrmw add i64* @id, i64 1 seq_cst |
| 55 | %tmp2 = add i64 %tmp1, 1 |
| 56 | %tmp3 = bitcast i8* %ptr to i64* |
| 57 | store i64 %tmp2, i64* %tmp3, align 4 |
| Michael Liao | de51caf | 2012-09-25 18:08:13 +0000 | [diff] [blame] | 58 | ret void |
| 59 | } |