1 ; Test if we can read store instructions. 2 3 ; RUN: %p2i -i %s --insts --no-local-syms | FileCheck %s 4 ; RUN: %p2i -i %s --args -notranslate -timing | \ 5 ; RUN: FileCheck --check-prefix=NOIR %s 6 7 define internal void @store_i8(i32 %addr) { 8 entry: 9 %addr_i8 = inttoptr i32 %addr to i8* 10 store i8 3, i8* %addr_i8, align 1 11 ret void 12 13 ; CHECK: __0: 14 ; CHECK-NEXT: store i8 3, i8* %__0, align 1 15 ; CHECK-NEXT: ret void 16 } 17 18 define internal void @store_i16(i32 %addr) { 19 entry: 20 %addr_i16 = inttoptr i32 %addr to i16* 21 store i16 5, i16* %addr_i16, align 1 22 ret void 23 24 ; CHECK: __0: 25 ; CHECK-NEXT: store i16 5, i16* %__0, align 1 26 ; CHECK-NEXT: ret void 27 } 28 29 define internal void @store_i32(i32 %addr, i32 %v) { 30 entry: 31 %addr_i32 = inttoptr i32 %addr to i32* 32 store i32 %v, i32* %addr_i32, align 1 33 ret void 34 35 ; CHECK: __0: 36 ; CHECK-NEXT: store i32 %__1, i32* %__0, align 1 37 ; CHECK-NEXT: ret void 38 } 39 40 define internal void @store_i64(i32 %addr, i64 %v) { 41 entry: 42 %addr_i64 = inttoptr i32 %addr to i64* 43 store i64 %v, i64* %addr_i64, align 1 44 ret void 45 46 ; CHECK: __0: 47 ; CHECK-NEXT: store i64 %__1, i64* %__0, align 1 48 ; CHECK-NEXT: ret void 49 } 50 51 define internal void @store_float_a1(i32 %addr, float %v) { 52 entry: 53 %addr_float = inttoptr i32 %addr to float* 54 store float %v, float* %addr_float, align 1 55 ret void 56 57 ; TODO(kschimpf) Fix store alignment in ICE to allow non-default. 58 59 ; CHECK: __0: 60 ; CHECK-NEXT: store float %__1, float* %__0, align 4 61 ; CHECK-NEXT: ret void 62 } 63 64 define internal void @store_float_a4(i32 %addr, float %v) { 65 entry: 66 %addr_float = inttoptr i32 %addr to float* 67 store float %v, float* %addr_float, align 4 68 ret void 69 70 ; CHECK: __0: 71 ; CHECK-NEXT: store float %__1, float* %__0, align 4 72 ; CHECK-NEXT: ret void 73 } 74 75 define internal void @store_double_a1(i32 %addr, double %v) { 76 entry: 77 %addr_double = inttoptr i32 %addr to double* 78 store double %v, double* %addr_double, align 1 79 ret void 80 81 ; TODO(kschimpf) Fix store alignment in ICE to allow non-default. 82 83 ; CHECK: __0: 84 ; CHECK-NEXT: store double %__1, double* %__0, align 8 85 ; CHECK-NEXT: ret void 86 } 87 88 define internal void @store_double_a8(i32 %addr, double %v) { 89 entry: 90 %addr_double = inttoptr i32 %addr to double* 91 store double %v, double* %addr_double, align 8 92 ret void 93 94 ; CHECK: __0: 95 ; CHECK-NEXT: store double %__1, double* %__0, align 8 96 ; CHECK-NEXT: ret void 97 } 98 99 define internal void @store_v16xI8(i32 %addr, <16 x i8> %v) { 100 %addr_v16xI8 = inttoptr i32 %addr to <16 x i8>* 101 store <16 x i8> %v, <16 x i8>* %addr_v16xI8, align 1 102 ret void 103 104 ; CHECK: __0: 105 ; CHECK-NEXT: store <16 x i8> %__1, <16 x i8>* %__0, align 1 106 ; CHECK-NEXT: ret void 107 } 108 109 define internal void @store_v8xI16(i32 %addr, <8 x i16> %v) { 110 %addr_v8xI16 = inttoptr i32 %addr to <8 x i16>* 111 store <8 x i16> %v, <8 x i16>* %addr_v8xI16, align 2 112 ret void 113 114 ; CHECK: __0: 115 ; CHECK-NEXT: store <8 x i16> %__1, <8 x i16>* %__0, align 2 116 ; CHECK-NEXT: ret void 117 } 118 119 define internal void @store_v4xI32(i32 %addr, <4 x i32> %v) { 120 %addr_v4xI32 = inttoptr i32 %addr to <4 x i32>* 121 store <4 x i32> %v, <4 x i32>* %addr_v4xI32, align 4 122 ret void 123 124 ; CHECK: __0: 125 ; CHECK-NEXT: store <4 x i32> %__1, <4 x i32>* %__0, align 4 126 ; CHECK-NEXT: ret void 127 } 128 129 define internal void @store_v4xFloat(i32 %addr, <4 x float> %v) { 130 %addr_v4xFloat = inttoptr i32 %addr to <4 x float>* 131 store <4 x float> %v, <4 x float>* %addr_v4xFloat, align 4 132 ret void 133 134 ; CHECK: __0: 135 ; CHECK-NEXT: store <4 x float> %__1, <4 x float>* %__0, align 4 136 ; CHECK-NEXT: ret void 137 } 138 139 ; NOIR: Total across all functions 140