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 |