| OLD | NEW |
| 1 ; Simple test of signed and unsigned integer conversions. | 1 ; Simple test of signed and unsigned integer conversions. |
| 2 | 2 |
| 3 ; TODO(jvoung): llvm-objdump doesn't symbolize global symbols well, so we | 3 ; TODO(jvoung): llvm-objdump doesn't symbolize global symbols well, so we |
| 4 ; have [0] == i8v, [2] == i16v, [4] == i32v, [8] == i64v, etc. | 4 ; have [0] == i8v, [2] == i16v, [4] == i32v, [8] == i64v, etc. |
| 5 | 5 |
| 6 ; RUN: %p2i -i %s --args -O2 --verbose none \ | 6 ; RUN: %p2i -i %s --args -O2 --verbose none \ |
| 7 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ | 7 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ |
| 8 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s | 8 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s |
| 9 ; RUN: %p2i -i %s --args -Om1 --verbose none \ | 9 ; RUN: %p2i -i %s --args -Om1 --verbose none \ |
| 10 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ | 10 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 %v2 = sext i8 %v0 to i32 | 30 %v2 = sext i8 %v0 to i32 |
| 31 %__5 = bitcast [4 x i8]* @i32v to i32* | 31 %__5 = bitcast [4 x i8]* @i32v to i32* |
| 32 store i32 %v2, i32* %__5, align 1 | 32 store i32 %v2, i32* %__5, align 1 |
| 33 %v3 = sext i8 %v0 to i64 | 33 %v3 = sext i8 %v0 to i64 |
| 34 %__7 = bitcast [8 x i8]* @i64v to i64* | 34 %__7 = bitcast [8 x i8]* @i64v to i64* |
| 35 store i64 %v3, i64* %__7, align 1 | 35 store i64 %v3, i64* %__7, align 1 |
| 36 ret void | 36 ret void |
| 37 } | 37 } |
| 38 ; CHECK-LABEL: from_int8 | 38 ; CHECK-LABEL: from_int8 |
| 39 ; CHECK: mov {{.*}}, byte ptr [ | 39 ; CHECK: mov {{.*}}, byte ptr [ |
| 40 ; CHECK: movsx | 40 ; CHECK: movsx e{{.*}}, {{[a-d]l|byte ptr}} |
| 41 ; CHECK: mov word ptr [ | 41 ; CHECK: mov word ptr [ |
| 42 ; CHECK: movsx | 42 ; CHECK: movsx |
| 43 ; CHECK: mov dword ptr [ | 43 ; CHECK: mov dword ptr [ |
| 44 ; CHECK: movsx | 44 ; CHECK: movsx |
| 45 ; CHECK: sar {{.*}}, 31 | 45 ; CHECK: sar {{.*}}, 31 |
| 46 ; This appears to be a bug in llvm-mc. It should be [8] and [12] to represent | 46 ; This appears to be a bug in llvm-mc. It should be [8] and [12] to represent |
| 47 ; i64v and i64+4. | 47 ; i64v and i64+4. |
| 48 ; CHECK-DAG: [8] | 48 ; CHECK-DAG: [8] |
| 49 ; CHECK-DAG: [8] | 49 ; CHECK-DAG: [8] |
| 50 | 50 |
| 51 define void @from_int16() { | 51 define void @from_int16() { |
| 52 entry: | 52 entry: |
| 53 %__0 = bitcast [2 x i8]* @i16v to i16* | 53 %__0 = bitcast [2 x i8]* @i16v to i16* |
| 54 %v0 = load i16* %__0, align 1 | 54 %v0 = load i16* %__0, align 1 |
| 55 %v1 = trunc i16 %v0 to i8 | 55 %v1 = trunc i16 %v0 to i8 |
| 56 %__3 = bitcast [1 x i8]* @i8v to i8* | 56 %__3 = bitcast [1 x i8]* @i8v to i8* |
| 57 store i8 %v1, i8* %__3, align 1 | 57 store i8 %v1, i8* %__3, align 1 |
| 58 %v2 = sext i16 %v0 to i32 | 58 %v2 = sext i16 %v0 to i32 |
| 59 %__5 = bitcast [4 x i8]* @i32v to i32* | 59 %__5 = bitcast [4 x i8]* @i32v to i32* |
| 60 store i32 %v2, i32* %__5, align 1 | 60 store i32 %v2, i32* %__5, align 1 |
| 61 %v3 = sext i16 %v0 to i64 | 61 %v3 = sext i16 %v0 to i64 |
| 62 %__7 = bitcast [8 x i8]* @i64v to i64* | 62 %__7 = bitcast [8 x i8]* @i64v to i64* |
| 63 store i64 %v3, i64* %__7, align 1 | 63 store i64 %v3, i64* %__7, align 1 |
| 64 ret void | 64 ret void |
| 65 } | 65 } |
| 66 ; CHECK-LABEL: from_int16 | 66 ; CHECK-LABEL: from_int16 |
| 67 ; CHECK: mov {{.*}}, word ptr [ | 67 ; CHECK: mov {{.*}}, word ptr [ |
| 68 ; CHECK: [0] | 68 ; CHECK: [0] |
| 69 ; CHECK: movsx | 69 ; CHECK: movsx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} |
| 70 ; CHECK: [4] | 70 ; CHECK: [4] |
| 71 ; CHECK: movsx | 71 ; CHECK: movsx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} |
| 72 ; CHECK: sar {{.*}}, 31 | 72 ; CHECK: sar {{.*}}, 31 |
| 73 ; CHECK: [8] | 73 ; CHECK: [8] |
| 74 | 74 |
| 75 define void @from_int32() { | 75 define void @from_int32() { |
| 76 entry: | 76 entry: |
| 77 %__0 = bitcast [4 x i8]* @i32v to i32* | 77 %__0 = bitcast [4 x i8]* @i32v to i32* |
| 78 %v0 = load i32* %__0, align 1 | 78 %v0 = load i32* %__0, align 1 |
| 79 %v1 = trunc i32 %v0 to i8 | 79 %v1 = trunc i32 %v0 to i8 |
| 80 %__3 = bitcast [1 x i8]* @i8v to i8* | 80 %__3 = bitcast [1 x i8]* @i8v to i8* |
| 81 store i8 %v1, i8* %__3, align 1 | 81 store i8 %v1, i8* %__3, align 1 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 %v2 = zext i8 %v0 to i32 | 126 %v2 = zext i8 %v0 to i32 |
| 127 %__5 = bitcast [4 x i8]* @i32v to i32* | 127 %__5 = bitcast [4 x i8]* @i32v to i32* |
| 128 store i32 %v2, i32* %__5, align 1 | 128 store i32 %v2, i32* %__5, align 1 |
| 129 %v3 = zext i8 %v0 to i64 | 129 %v3 = zext i8 %v0 to i64 |
| 130 %__7 = bitcast [8 x i8]* @i64v to i64* | 130 %__7 = bitcast [8 x i8]* @i64v to i64* |
| 131 store i64 %v3, i64* %__7, align 1 | 131 store i64 %v3, i64* %__7, align 1 |
| 132 ret void | 132 ret void |
| 133 } | 133 } |
| 134 ; CHECK-LABEL: from_uint8 | 134 ; CHECK-LABEL: from_uint8 |
| 135 ; CHECK: [16] | 135 ; CHECK: [16] |
| 136 ; CHECK: movzx | 136 ; CHECK: movzx e{{.*}}, {{[a-d]l|byte ptr}} |
| 137 ; CHECK: [2] | 137 ; CHECK: [2] |
| 138 ; CHECK: movzx | 138 ; CHECK: movzx |
| 139 ; CHECK: [4] | 139 ; CHECK: [4] |
| 140 ; CHECK: movzx | 140 ; CHECK: movzx |
| 141 ; CHECK: mov {{.*}}, 0 | 141 ; CHECK: mov {{.*}}, 0 |
| 142 ; CHECK: [8] | 142 ; CHECK: [8] |
| 143 | 143 |
| 144 define void @from_uint16() { | 144 define void @from_uint16() { |
| 145 entry: | 145 entry: |
| 146 %__0 = bitcast [2 x i8]* @u16v to i16* | 146 %__0 = bitcast [2 x i8]* @u16v to i16* |
| 147 %v0 = load i16* %__0, align 1 | 147 %v0 = load i16* %__0, align 1 |
| 148 %v1 = trunc i16 %v0 to i8 | 148 %v1 = trunc i16 %v0 to i8 |
| 149 %__3 = bitcast [1 x i8]* @i8v to i8* | 149 %__3 = bitcast [1 x i8]* @i8v to i8* |
| 150 store i8 %v1, i8* %__3, align 1 | 150 store i8 %v1, i8* %__3, align 1 |
| 151 %v2 = zext i16 %v0 to i32 | 151 %v2 = zext i16 %v0 to i32 |
| 152 %__5 = bitcast [4 x i8]* @i32v to i32* | 152 %__5 = bitcast [4 x i8]* @i32v to i32* |
| 153 store i32 %v2, i32* %__5, align 1 | 153 store i32 %v2, i32* %__5, align 1 |
| 154 %v3 = zext i16 %v0 to i64 | 154 %v3 = zext i16 %v0 to i64 |
| 155 %__7 = bitcast [8 x i8]* @i64v to i64* | 155 %__7 = bitcast [8 x i8]* @i64v to i64* |
| 156 store i64 %v3, i64* %__7, align 1 | 156 store i64 %v3, i64* %__7, align 1 |
| 157 ret void | 157 ret void |
| 158 } | 158 } |
| 159 ; CHECK-LABEL: from_uint16 | 159 ; CHECK-LABEL: from_uint16 |
| 160 ; CHECK: [18] | 160 ; CHECK: [18] |
| 161 ; CHECK: [0] | 161 ; CHECK: [0] |
| 162 ; CHECK: movzx | 162 ; CHECK: movzx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} |
| 163 ; CHECK: [4] | 163 ; CHECK: [4] |
| 164 ; CHECK: movzx | 164 ; CHECK: movzx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} |
| 165 ; CHECK: mov {{.*}}, 0 | 165 ; CHECK: mov {{.*}}, 0 |
| 166 ; CHECK: [8] | 166 ; CHECK: [8] |
| 167 | 167 |
| 168 define void @from_uint32() { | 168 define void @from_uint32() { |
| 169 entry: | 169 entry: |
| 170 %__0 = bitcast [4 x i8]* @u32v to i32* | 170 %__0 = bitcast [4 x i8]* @u32v to i32* |
| 171 %v0 = load i32* %__0, align 1 | 171 %v0 = load i32* %__0, align 1 |
| 172 %v1 = trunc i32 %v0 to i8 | 172 %v1 = trunc i32 %v0 to i8 |
| 173 %__3 = bitcast [1 x i8]* @i8v to i8* | 173 %__3 = bitcast [1 x i8]* @i8v to i8* |
| 174 store i8 %v1, i8* %__3, align 1 | 174 store i8 %v1, i8* %__3, align 1 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 202 store i32 %v3, i32* %__7, align 1 | 202 store i32 %v3, i32* %__7, align 1 |
| 203 ret void | 203 ret void |
| 204 } | 204 } |
| 205 ; CHECK-LABEL: from_uint64 | 205 ; CHECK-LABEL: from_uint64 |
| 206 ; CHECK: [24] | 206 ; CHECK: [24] |
| 207 ; CHECK: [0] | 207 ; CHECK: [0] |
| 208 ; CHECK: [2] | 208 ; CHECK: [2] |
| 209 ; CHECK: [4] | 209 ; CHECK: [4] |
| 210 | 210 |
| 211 ; ERRORS-NOT: ICE translation error | 211 ; ERRORS-NOT: ICE translation error |
| OLD | NEW |