|  | 
| 1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | 
| 2 |  | -; RUN: llc < %s -mtriple=x86_64-apple-macosx10.7.0 -verify-machineinstrs | FileCheck %s | 
| 3 |  | -; RUN: llc < %s -mtriple=x86_64-apple-macosx10.7.0 -verify-machineinstrs -O0 | FileCheck %s | 
|  | 2 | +; RUN: llc < %s -mtriple=x86_64-apple-macosx10.7.0 -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK,CHECK3 | 
|  | 3 | +; RUN: llc < %s -mtriple=x86_64-apple-macosx10.7.0 -verify-machineinstrs -O0 | FileCheck %s --check-prefixes=CHECK,CHECK0 | 
| 4 | 4 | 
 | 
| 5 | 5 | define void @test1(ptr %ptr, i32 %val1) { | 
| 6 | 6 | ; CHECK-LABEL: test1: | 
| @@ -28,3 +28,120 @@ define i32 @test3(ptr %ptr) { | 
| 28 | 28 |   %val = load atomic i32, ptr %ptr seq_cst, align 4 | 
| 29 | 29 |   ret i32 %val | 
| 30 | 30 | } | 
|  | 31 | + | 
|  | 32 | +define <1 x i32> @atomic_vec1_i32(ptr %x) { | 
|  | 33 | +; CHECK-LABEL: atomic_vec1_i32: | 
|  | 34 | +; CHECK:       ## %bb.0: | 
|  | 35 | +; CHECK-NEXT:    movl (%rdi), %eax | 
|  | 36 | +; CHECK-NEXT:    retq | 
|  | 37 | +  %ret = load atomic <1 x i32>, ptr %x acquire, align 4 | 
|  | 38 | +  ret <1 x i32> %ret | 
|  | 39 | +} | 
|  | 40 | + | 
|  | 41 | +define <1 x i8> @atomic_vec1_i8(ptr %x) { | 
|  | 42 | +; CHECK3-LABEL: atomic_vec1_i8: | 
|  | 43 | +; CHECK3:       ## %bb.0: | 
|  | 44 | +; CHECK3-NEXT:    movzbl (%rdi), %eax | 
|  | 45 | +; CHECK3-NEXT:    retq | 
|  | 46 | +; | 
|  | 47 | +; CHECK0-LABEL: atomic_vec1_i8: | 
|  | 48 | +; CHECK0:       ## %bb.0: | 
|  | 49 | +; CHECK0-NEXT:    movb (%rdi), %al | 
|  | 50 | +; CHECK0-NEXT:    retq | 
|  | 51 | +  %ret = load atomic <1 x i8>, ptr %x acquire, align 1 | 
|  | 52 | +  ret <1 x i8> %ret | 
|  | 53 | +} | 
|  | 54 | + | 
|  | 55 | +define <1 x i16> @atomic_vec1_i16(ptr %x) { | 
|  | 56 | +; CHECK3-LABEL: atomic_vec1_i16: | 
|  | 57 | +; CHECK3:       ## %bb.0: | 
|  | 58 | +; CHECK3-NEXT:    movzwl (%rdi), %eax | 
|  | 59 | +; CHECK3-NEXT:    retq | 
|  | 60 | +; | 
|  | 61 | +; CHECK0-LABEL: atomic_vec1_i16: | 
|  | 62 | +; CHECK0:       ## %bb.0: | 
|  | 63 | +; CHECK0-NEXT:    movw (%rdi), %ax | 
|  | 64 | +; CHECK0-NEXT:    retq | 
|  | 65 | +  %ret = load atomic <1 x i16>, ptr %x acquire, align 2 | 
|  | 66 | +  ret <1 x i16> %ret | 
|  | 67 | +} | 
|  | 68 | + | 
|  | 69 | +define <1 x i32> @atomic_vec1_i8_zext(ptr %x) { | 
|  | 70 | +; CHECK3-LABEL: atomic_vec1_i8_zext: | 
|  | 71 | +; CHECK3:       ## %bb.0: | 
|  | 72 | +; CHECK3-NEXT:    movzbl (%rdi), %eax | 
|  | 73 | +; CHECK3-NEXT:    movzbl %al, %eax | 
|  | 74 | +; CHECK3-NEXT:    retq | 
|  | 75 | +; | 
|  | 76 | +; CHECK0-LABEL: atomic_vec1_i8_zext: | 
|  | 77 | +; CHECK0:       ## %bb.0: | 
|  | 78 | +; CHECK0-NEXT:    movb (%rdi), %al | 
|  | 79 | +; CHECK0-NEXT:    movzbl %al, %eax | 
|  | 80 | +; CHECK0-NEXT:    retq | 
|  | 81 | +  %ret = load atomic <1 x i8>, ptr %x acquire, align 1 | 
|  | 82 | +  %zret = zext <1 x i8> %ret to <1 x i32> | 
|  | 83 | +  ret <1 x i32> %zret | 
|  | 84 | +} | 
|  | 85 | + | 
|  | 86 | +define <1 x i64> @atomic_vec1_i16_sext(ptr %x) { | 
|  | 87 | +; CHECK3-LABEL: atomic_vec1_i16_sext: | 
|  | 88 | +; CHECK3:       ## %bb.0: | 
|  | 89 | +; CHECK3-NEXT:    movzwl (%rdi), %eax | 
|  | 90 | +; CHECK3-NEXT:    movswq %ax, %rax | 
|  | 91 | +; CHECK3-NEXT:    retq | 
|  | 92 | +; | 
|  | 93 | +; CHECK0-LABEL: atomic_vec1_i16_sext: | 
|  | 94 | +; CHECK0:       ## %bb.0: | 
|  | 95 | +; CHECK0-NEXT:    movw (%rdi), %ax | 
|  | 96 | +; CHECK0-NEXT:    movswq %ax, %rax | 
|  | 97 | +; CHECK0-NEXT:    retq | 
|  | 98 | +  %ret = load atomic <1 x i16>, ptr %x acquire, align 2 | 
|  | 99 | +  %sret = sext <1 x i16> %ret to <1 x i64> | 
|  | 100 | +  ret <1 x i64> %sret | 
|  | 101 | +} | 
|  | 102 | + | 
|  | 103 | +define <1 x ptr addrspace(270)> @atomic_vec1_ptr270(ptr %x) { | 
|  | 104 | +; CHECK-LABEL: atomic_vec1_ptr270: | 
|  | 105 | +; CHECK:       ## %bb.0: | 
|  | 106 | +; CHECK-NEXT:    movl (%rdi), %eax | 
|  | 107 | +; CHECK-NEXT:    retq | 
|  | 108 | +  %ret = load atomic <1 x ptr addrspace(270)>, ptr %x acquire, align 4 | 
|  | 109 | +  ret <1 x ptr addrspace(270)> %ret | 
|  | 110 | +} | 
|  | 111 | + | 
|  | 112 | +define <1 x bfloat> @atomic_vec1_bfloat(ptr %x) { | 
|  | 113 | +; CHECK3-LABEL: atomic_vec1_bfloat: | 
|  | 114 | +; CHECK3:       ## %bb.0: | 
|  | 115 | +; CHECK3-NEXT:    movzwl (%rdi), %eax | 
|  | 116 | +; CHECK3-NEXT:    pinsrw $0, %eax, %xmm0 | 
|  | 117 | +; CHECK3-NEXT:    retq | 
|  | 118 | +; | 
|  | 119 | +; CHECK0-LABEL: atomic_vec1_bfloat: | 
|  | 120 | +; CHECK0:       ## %bb.0: | 
|  | 121 | +; CHECK0-NEXT:    movw (%rdi), %cx | 
|  | 122 | +; CHECK0-NEXT:    ## implicit-def: $eax | 
|  | 123 | +; CHECK0-NEXT:    movw %cx, %ax | 
|  | 124 | +; CHECK0-NEXT:    ## implicit-def: $xmm0 | 
|  | 125 | +; CHECK0-NEXT:    pinsrw $0, %eax, %xmm0 | 
|  | 126 | +; CHECK0-NEXT:    retq | 
|  | 127 | +  %ret = load atomic <1 x bfloat>, ptr %x acquire, align 2 | 
|  | 128 | +  ret <1 x bfloat> %ret | 
|  | 129 | +} | 
|  | 130 | + | 
|  | 131 | +define <1 x ptr> @atomic_vec1_ptr_align(ptr %x) nounwind { | 
|  | 132 | +; CHECK-LABEL: atomic_vec1_ptr_align: | 
|  | 133 | +; CHECK:       ## %bb.0: | 
|  | 134 | +; CHECK-NEXT:    movq (%rdi), %rax | 
|  | 135 | +; CHECK-NEXT:    retq | 
|  | 136 | +  %ret = load atomic <1 x ptr>, ptr %x acquire, align 8 | 
|  | 137 | +  ret <1 x ptr> %ret | 
|  | 138 | +} | 
|  | 139 | + | 
|  | 140 | +define <1 x i64> @atomic_vec1_i64_align(ptr %x) nounwind { | 
|  | 141 | +; CHECK-LABEL: atomic_vec1_i64_align: | 
|  | 142 | +; CHECK:       ## %bb.0: | 
|  | 143 | +; CHECK-NEXT:    movq (%rdi), %rax | 
|  | 144 | +; CHECK-NEXT:    retq | 
|  | 145 | +  %ret = load atomic <1 x i64>, ptr %x acquire, align 8 | 
|  | 146 | +  ret <1 x i64> %ret | 
|  | 147 | +} | 
0 commit comments