OLD | NEW |
(Empty) | |
| 1 ; Test if we can read load instructions. |
| 2 |
| 3 ; RUN: llvm-as < %s | pnacl-freeze \ |
| 4 ; RUN: | %llvm2ice -notranslate -verbose=inst -build-on-read \ |
| 5 ; RUN: -allow-pnacl-reader-error-recovery \ |
| 6 ; RUN: | FileCheck %s |
| 7 |
| 8 define i32 @load_i8(i32 %addr) { |
| 9 entry: |
| 10 %addr_i8 = inttoptr i32 %addr to i8* |
| 11 %v = load i8* %addr_i8, align 1 |
| 12 %r = sext i8 %v to i32 |
| 13 ret i32 %r |
| 14 |
| 15 ; CHECK: __0: |
| 16 ; CHECK-NEXT: %__1 = load i8* %__0, align 1 |
| 17 ; CHECK-NEXT: %__2 = sext i8 %__1 to i32 |
| 18 ; CHECK-NEXT: ret i32 %__2 |
| 19 } |
| 20 |
| 21 define i32 @load_i16(i32 %addr) { |
| 22 entry: |
| 23 %addr_i16 = inttoptr i32 %addr to i16* |
| 24 %v = load i16* %addr_i16, align 1 |
| 25 %r = sext i16 %v to i32 |
| 26 ret i32 %r |
| 27 |
| 28 ; CHECK: __0: |
| 29 ; CHECK-NEXT: %__1 = load i16* %__0, align 1 |
| 30 ; CHECK-NEXT: %__2 = sext i16 %__1 to i32 |
| 31 ; CHECK-NEXT: ret i32 %__2 |
| 32 } |
| 33 |
| 34 define i32 @load_i32(i32 %addr) { |
| 35 entry: |
| 36 %addr_i32 = inttoptr i32 %addr to i32* |
| 37 %v = load i32* %addr_i32, align 1 |
| 38 ret i32 %v |
| 39 |
| 40 ; CHECK: __0: |
| 41 ; CHECK-NEXT: %__1 = load i32* %__0, align 1 |
| 42 ; CHECK-NEXT: ret i32 %__1 |
| 43 } |
| 44 |
| 45 define i64 @load_i64(i32 %addr) { |
| 46 entry: |
| 47 %addr_i64 = inttoptr i32 %addr to i64* |
| 48 %v = load i64* %addr_i64, align 1 |
| 49 ret i64 %v |
| 50 |
| 51 ; CHECK: __0: |
| 52 ; CHECK-NEXT: %__1 = load i64* %__0, align 1 |
| 53 ; CHECK-NEXT: ret i64 %__1 |
| 54 } |
| 55 |
| 56 define float @load_float_a1(i32 %addr) { |
| 57 entry: |
| 58 %addr_float = inttoptr i32 %addr to float* |
| 59 %v = load float* %addr_float, align 1 |
| 60 ret float %v |
| 61 |
| 62 ; TODO(kschimpf) Fix load alignment in ICE to allow non-default. |
| 63 |
| 64 ; CHECK: __0: |
| 65 ; CHECK-NEXT: %__1 = load float* %__0, align 4 |
| 66 ; CHECK-NEXT: ret float %__1 |
| 67 } |
| 68 |
| 69 |
| 70 define float @load_float_a4(i32 %addr) { |
| 71 entry: |
| 72 %addr_float = inttoptr i32 %addr to float* |
| 73 %v = load float* %addr_float, align 4 |
| 74 ret float %v |
| 75 |
| 76 ; CHECK: __0: |
| 77 ; CHECK-NEXT: %__1 = load float* %__0, align 4 |
| 78 ; CHECK-NEXT: ret float %__1 |
| 79 } |
| 80 |
| 81 define double @load_double_a1(i32 %addr) { |
| 82 entry: |
| 83 %addr_double = inttoptr i32 %addr to double* |
| 84 %v = load double* %addr_double, align 1 |
| 85 ret double %v |
| 86 |
| 87 ; TODO(kschimpf) Fix load alignment in ICE to allow non-default. |
| 88 |
| 89 ; CHECK: __0: |
| 90 ; CHECK-NEXT: %__1 = load double* %__0, align 8 |
| 91 ; CHECK-NEXT: ret double %__1 |
| 92 } |
| 93 |
| 94 |
| 95 define double @load_double_a8(i32 %addr) { |
| 96 entry: |
| 97 %addr_double = inttoptr i32 %addr to double* |
| 98 %v = load double* %addr_double, align 8 |
| 99 ret double %v |
| 100 |
| 101 ; CHECK: __0: |
| 102 ; CHECK-NEXT: %__1 = load double* %__0, align 8 |
| 103 ; CHECK-NEXT: ret double %__1 |
| 104 } |
| 105 |
| 106 define <16 x i8> @load_v16xI8(i32 %addr) { |
| 107 entry: |
| 108 %addr_v16xI8 = inttoptr i32 %addr to <16 x i8>* |
| 109 %v = load <16 x i8>* %addr_v16xI8, align 1 |
| 110 ret <16 x i8> %v |
| 111 |
| 112 ; CHECK: __0: |
| 113 ; CHECK-NEXT: %__1 = load <16 x i8>* %__0, align 1 |
| 114 ; CHECK-NEXT: ret <16 x i8> %__1 |
| 115 } |
| 116 |
| 117 define <8 x i16> @load_v8xI16(i32 %addr) { |
| 118 entry: |
| 119 %addr_v8xI16 = inttoptr i32 %addr to <8 x i16>* |
| 120 %v = load <8 x i16>* %addr_v8xI16, align 2 |
| 121 ret <8 x i16> %v |
| 122 |
| 123 ; CHECK: __0: |
| 124 ; CHECK-NEXT: %__1 = load <8 x i16>* %__0, align 2 |
| 125 ; CHECK-NEXT: ret <8 x i16> %__1 |
| 126 } |
| 127 |
| 128 define <4 x i32> @load_v4xI32(i32 %addr) { |
| 129 entry: |
| 130 %addr_v4xI32 = inttoptr i32 %addr to <4 x i32>* |
| 131 %v = load <4 x i32>* %addr_v4xI32, align 4 |
| 132 ret <4 x i32> %v |
| 133 |
| 134 ; CHECK: __0: |
| 135 ; CHECK-NEXT: %__1 = load <4 x i32>* %__0, align 4 |
| 136 ; CHECK-NEXT: ret <4 x i32> %__1 |
| 137 } |
| 138 |
| 139 define <4 x float> @load_v4xFloat(i32 %addr) { |
| 140 entry: |
| 141 %addr_v4xFloat = inttoptr i32 %addr to <4 x float>* |
| 142 %v = load <4 x float>* %addr_v4xFloat, align 4 |
| 143 ret <4 x float> %v |
| 144 |
| 145 ; CHECK: __0: |
| 146 ; CHECK-NEXT: %__1 = load <4 x float>* %__0, align 4 |
| 147 ; CHECK-NEXT: ret <4 x float> %__1 |
| 148 } |
| 149 |
OLD | NEW |