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 7define internal void @store_i8(i32 %addr) { 8entry: 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 18define internal void @store_i16(i32 %addr) { 19entry: 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 29define internal void @store_i32(i32 %addr, i32 %v) { 30entry: 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 40define internal void @store_i64(i32 %addr, i64 %v) { 41entry: 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 51define internal void @store_float_a1(i32 %addr, float %v) { 52entry: 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 64define internal void @store_float_a4(i32 %addr, float %v) { 65entry: 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 75define internal void @store_double_a1(i32 %addr, double %v) { 76entry: 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 88define internal void @store_double_a8(i32 %addr, double %v) { 89entry: 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 99define 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 109define 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 119define 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 129define 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