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 -filetype=obj \ | 7 ; RUN: | llvm-mc -triple=i686-none-nacl -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 -filetype=obj \ | 10 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \ |
(...skipping 24 matching lines...) Expand all Loading... |
35 ret void | 35 ret void |
36 } | 36 } |
37 ; CHECK-LABEL: from_int8 | 37 ; CHECK-LABEL: from_int8 |
38 ; CHECK: mov {{.*}}, byte ptr [ | 38 ; CHECK: mov {{.*}}, byte ptr [ |
39 ; CHECK: movsx e{{.*}}, {{[a-d]l|byte ptr}} | 39 ; CHECK: movsx e{{.*}}, {{[a-d]l|byte ptr}} |
40 ; CHECK: mov word ptr [ | 40 ; CHECK: mov word ptr [ |
41 ; CHECK: movsx | 41 ; CHECK: movsx |
42 ; CHECK: mov dword ptr [ | 42 ; CHECK: mov dword ptr [ |
43 ; CHECK: movsx | 43 ; CHECK: movsx |
44 ; CHECK: sar {{.*}}, 31 | 44 ; CHECK: sar {{.*}}, 31 |
45 ; This appears to be a bug in llvm-mc. It should be [8] and [12] to represent | 45 ; This appears to be a bug in llvm-mc. It should be i64v and i64+4. |
46 ; i64v and i64+4. | 46 ; CHECK-DAG: [.bss] |
47 ; CHECK-DAG: [8] | 47 ; CHECK-DAG: [.bss] |
48 ; CHECK-DAG: [8] | |
49 | 48 |
50 define void @from_int16() { | 49 define void @from_int16() { |
51 entry: | 50 entry: |
52 %__0 = bitcast [2 x i8]* @i16v to i16* | 51 %__0 = bitcast [2 x i8]* @i16v to i16* |
53 %v0 = load i16* %__0, align 1 | 52 %v0 = load i16* %__0, align 1 |
54 %v1 = trunc i16 %v0 to i8 | 53 %v1 = trunc i16 %v0 to i8 |
55 %__3 = bitcast [1 x i8]* @i8v to i8* | 54 %__3 = bitcast [1 x i8]* @i8v to i8* |
56 store i8 %v1, i8* %__3, align 1 | 55 store i8 %v1, i8* %__3, align 1 |
57 %v2 = sext i16 %v0 to i32 | 56 %v2 = sext i16 %v0 to i32 |
58 %__5 = bitcast [4 x i8]* @i32v to i32* | 57 %__5 = bitcast [4 x i8]* @i32v to i32* |
59 store i32 %v2, i32* %__5, align 1 | 58 store i32 %v2, i32* %__5, align 1 |
60 %v3 = sext i16 %v0 to i64 | 59 %v3 = sext i16 %v0 to i64 |
61 %__7 = bitcast [8 x i8]* @i64v to i64* | 60 %__7 = bitcast [8 x i8]* @i64v to i64* |
62 store i64 %v3, i64* %__7, align 1 | 61 store i64 %v3, i64* %__7, align 1 |
63 ret void | 62 ret void |
64 } | 63 } |
65 ; CHECK-LABEL: from_int16 | 64 ; CHECK-LABEL: from_int16 |
66 ; CHECK: mov {{.*}}, word ptr [ | 65 ; CHECK: mov {{.*}}, word ptr [ |
67 ; CHECK: [0] | 66 ; CHECK: [.bss] |
68 ; CHECK: movsx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} | 67 ; CHECK: movsx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} |
69 ; CHECK: [4] | 68 ; CHECK: [.bss] |
70 ; CHECK: movsx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} | 69 ; CHECK: movsx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} |
71 ; CHECK: sar {{.*}}, 31 | 70 ; CHECK: sar {{.*}}, 31 |
72 ; CHECK: [8] | 71 ; CHECK: [.bss] |
73 | 72 |
74 define void @from_int32() { | 73 define void @from_int32() { |
75 entry: | 74 entry: |
76 %__0 = bitcast [4 x i8]* @i32v to i32* | 75 %__0 = bitcast [4 x i8]* @i32v to i32* |
77 %v0 = load i32* %__0, align 1 | 76 %v0 = load i32* %__0, align 1 |
78 %v1 = trunc i32 %v0 to i8 | 77 %v1 = trunc i32 %v0 to i8 |
79 %__3 = bitcast [1 x i8]* @i8v to i8* | 78 %__3 = bitcast [1 x i8]* @i8v to i8* |
80 store i8 %v1, i8* %__3, align 1 | 79 store i8 %v1, i8* %__3, align 1 |
81 %v2 = trunc i32 %v0 to i16 | 80 %v2 = trunc i32 %v0 to i16 |
82 %__5 = bitcast [2 x i8]* @i16v to i16* | 81 %__5 = bitcast [2 x i8]* @i16v to i16* |
83 store i16 %v2, i16* %__5, align 1 | 82 store i16 %v2, i16* %__5, align 1 |
84 %v3 = sext i32 %v0 to i64 | 83 %v3 = sext i32 %v0 to i64 |
85 %__7 = bitcast [8 x i8]* @i64v to i64* | 84 %__7 = bitcast [8 x i8]* @i64v to i64* |
86 store i64 %v3, i64* %__7, align 1 | 85 store i64 %v3, i64* %__7, align 1 |
87 ret void | 86 ret void |
88 } | 87 } |
89 ; CHECK-LABEL: from_int32 | 88 ; CHECK-LABEL: from_int32 |
90 ; CHECK: [4] | 89 ; CHECK: [.bss] |
91 ; CHECK: [0] | 90 ; CHECK: [.bss] |
92 ; CHECK: [2] | 91 ; CHECK: [.bss] |
93 ; CHECK: sar {{.*}}, 31 | 92 ; CHECK: sar {{.*}}, 31 |
94 ; CHECK: [8] | 93 ; CHECK: [.bss] |
95 | 94 |
96 define void @from_int64() { | 95 define void @from_int64() { |
97 entry: | 96 entry: |
98 %__0 = bitcast [8 x i8]* @i64v to i64* | 97 %__0 = bitcast [8 x i8]* @i64v to i64* |
99 %v0 = load i64* %__0, align 1 | 98 %v0 = load i64* %__0, align 1 |
100 %v1 = trunc i64 %v0 to i8 | 99 %v1 = trunc i64 %v0 to i8 |
101 %__3 = bitcast [1 x i8]* @i8v to i8* | 100 %__3 = bitcast [1 x i8]* @i8v to i8* |
102 store i8 %v1, i8* %__3, align 1 | 101 store i8 %v1, i8* %__3, align 1 |
103 %v2 = trunc i64 %v0 to i16 | 102 %v2 = trunc i64 %v0 to i16 |
104 %__5 = bitcast [2 x i8]* @i16v to i16* | 103 %__5 = bitcast [2 x i8]* @i16v to i16* |
105 store i16 %v2, i16* %__5, align 1 | 104 store i16 %v2, i16* %__5, align 1 |
106 %v3 = trunc i64 %v0 to i32 | 105 %v3 = trunc i64 %v0 to i32 |
107 %__7 = bitcast [4 x i8]* @i32v to i32* | 106 %__7 = bitcast [4 x i8]* @i32v to i32* |
108 store i32 %v3, i32* %__7, align 1 | 107 store i32 %v3, i32* %__7, align 1 |
109 ret void | 108 ret void |
110 } | 109 } |
111 ; CHECK-LABEL: from_int64 | 110 ; CHECK-LABEL: from_int64 |
112 ; CHECK: [8] | 111 ; CHECK: [.bss] |
113 ; CHECK: [0] | 112 ; CHECK: [.bss] |
114 ; CHECK: [2] | 113 ; CHECK: [.bss] |
115 ; CHECK: [4] | 114 ; CHECK: [.bss] |
116 | 115 |
117 | 116 |
118 define void @from_uint8() { | 117 define void @from_uint8() { |
119 entry: | 118 entry: |
120 %__0 = bitcast [1 x i8]* @u8v to i8* | 119 %__0 = bitcast [1 x i8]* @u8v to i8* |
121 %v0 = load i8* %__0, align 1 | 120 %v0 = load i8* %__0, align 1 |
122 %v1 = zext i8 %v0 to i16 | 121 %v1 = zext i8 %v0 to i16 |
123 %__3 = bitcast [2 x i8]* @i16v to i16* | 122 %__3 = bitcast [2 x i8]* @i16v to i16* |
124 store i16 %v1, i16* %__3, align 1 | 123 store i16 %v1, i16* %__3, align 1 |
125 %v2 = zext i8 %v0 to i32 | 124 %v2 = zext i8 %v0 to i32 |
126 %__5 = bitcast [4 x i8]* @i32v to i32* | 125 %__5 = bitcast [4 x i8]* @i32v to i32* |
127 store i32 %v2, i32* %__5, align 1 | 126 store i32 %v2, i32* %__5, align 1 |
128 %v3 = zext i8 %v0 to i64 | 127 %v3 = zext i8 %v0 to i64 |
129 %__7 = bitcast [8 x i8]* @i64v to i64* | 128 %__7 = bitcast [8 x i8]* @i64v to i64* |
130 store i64 %v3, i64* %__7, align 1 | 129 store i64 %v3, i64* %__7, align 1 |
131 ret void | 130 ret void |
132 } | 131 } |
133 ; CHECK-LABEL: from_uint8 | 132 ; CHECK-LABEL: from_uint8 |
134 ; CHECK: [16] | 133 ; CHECK: [.bss] |
135 ; CHECK: movzx e{{.*}}, {{[a-d]l|byte ptr}} | 134 ; CHECK: movzx e{{.*}}, {{[a-d]l|byte ptr}} |
136 ; CHECK: [2] | 135 ; CHECK: [.bss] |
137 ; CHECK: movzx | 136 ; CHECK: movzx |
138 ; CHECK: [4] | 137 ; CHECK: [.bss] |
139 ; CHECK: movzx | 138 ; CHECK: movzx |
140 ; CHECK: mov {{.*}}, 0 | 139 ; CHECK: mov {{.*}}, 0 |
141 ; CHECK: [8] | 140 ; CHECK: [.bss] |
142 | 141 |
143 define void @from_uint16() { | 142 define void @from_uint16() { |
144 entry: | 143 entry: |
145 %__0 = bitcast [2 x i8]* @u16v to i16* | 144 %__0 = bitcast [2 x i8]* @u16v to i16* |
146 %v0 = load i16* %__0, align 1 | 145 %v0 = load i16* %__0, align 1 |
147 %v1 = trunc i16 %v0 to i8 | 146 %v1 = trunc i16 %v0 to i8 |
148 %__3 = bitcast [1 x i8]* @i8v to i8* | 147 %__3 = bitcast [1 x i8]* @i8v to i8* |
149 store i8 %v1, i8* %__3, align 1 | 148 store i8 %v1, i8* %__3, align 1 |
150 %v2 = zext i16 %v0 to i32 | 149 %v2 = zext i16 %v0 to i32 |
151 %__5 = bitcast [4 x i8]* @i32v to i32* | 150 %__5 = bitcast [4 x i8]* @i32v to i32* |
152 store i32 %v2, i32* %__5, align 1 | 151 store i32 %v2, i32* %__5, align 1 |
153 %v3 = zext i16 %v0 to i64 | 152 %v3 = zext i16 %v0 to i64 |
154 %__7 = bitcast [8 x i8]* @i64v to i64* | 153 %__7 = bitcast [8 x i8]* @i64v to i64* |
155 store i64 %v3, i64* %__7, align 1 | 154 store i64 %v3, i64* %__7, align 1 |
156 ret void | 155 ret void |
157 } | 156 } |
158 ; CHECK-LABEL: from_uint16 | 157 ; CHECK-LABEL: from_uint16 |
159 ; CHECK: [18] | 158 ; CHECK: [.bss] |
160 ; CHECK: [0] | 159 ; CHECK: [.bss] |
161 ; CHECK: movzx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} | 160 ; CHECK: movzx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} |
162 ; CHECK: [4] | 161 ; CHECK: [.bss] |
163 ; CHECK: movzx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} | 162 ; CHECK: movzx e{{.*}}, {{.*x|[ds]i|bp|word ptr}} |
164 ; CHECK: mov {{.*}}, 0 | 163 ; CHECK: mov {{.*}}, 0 |
165 ; CHECK: [8] | 164 ; CHECK: [.bss] |
166 | 165 |
167 define void @from_uint32() { | 166 define void @from_uint32() { |
168 entry: | 167 entry: |
169 %__0 = bitcast [4 x i8]* @u32v to i32* | 168 %__0 = bitcast [4 x i8]* @u32v to i32* |
170 %v0 = load i32* %__0, align 1 | 169 %v0 = load i32* %__0, align 1 |
171 %v1 = trunc i32 %v0 to i8 | 170 %v1 = trunc i32 %v0 to i8 |
172 %__3 = bitcast [1 x i8]* @i8v to i8* | 171 %__3 = bitcast [1 x i8]* @i8v to i8* |
173 store i8 %v1, i8* %__3, align 1 | 172 store i8 %v1, i8* %__3, align 1 |
174 %v2 = trunc i32 %v0 to i16 | 173 %v2 = trunc i32 %v0 to i16 |
175 %__5 = bitcast [2 x i8]* @i16v to i16* | 174 %__5 = bitcast [2 x i8]* @i16v to i16* |
176 store i16 %v2, i16* %__5, align 1 | 175 store i16 %v2, i16* %__5, align 1 |
177 %v3 = zext i32 %v0 to i64 | 176 %v3 = zext i32 %v0 to i64 |
178 %__7 = bitcast [8 x i8]* @i64v to i64* | 177 %__7 = bitcast [8 x i8]* @i64v to i64* |
179 store i64 %v3, i64* %__7, align 1 | 178 store i64 %v3, i64* %__7, align 1 |
180 ret void | 179 ret void |
181 } | 180 } |
182 ; CHECK-LABEL: from_uint32 | 181 ; CHECK-LABEL: from_uint32 |
183 ; CHECK: [20] | 182 ; CHECK: [.bss] |
184 ; CHECK: [0] | 183 ; CHECK: [.bss] |
185 ; CHECK: [2] | 184 ; CHECK: [.bss] |
186 ; CHECK: mov {{.*}}, 0 | 185 ; CHECK: mov {{.*}}, 0 |
187 ; CHECK: [8] | 186 ; CHECK: [.bss] |
188 | 187 |
189 define void @from_uint64() { | 188 define void @from_uint64() { |
190 entry: | 189 entry: |
191 %__0 = bitcast [8 x i8]* @u64v to i64* | 190 %__0 = bitcast [8 x i8]* @u64v to i64* |
192 %v0 = load i64* %__0, align 1 | 191 %v0 = load i64* %__0, align 1 |
193 %v1 = trunc i64 %v0 to i8 | 192 %v1 = trunc i64 %v0 to i8 |
194 %__3 = bitcast [1 x i8]* @i8v to i8* | 193 %__3 = bitcast [1 x i8]* @i8v to i8* |
195 store i8 %v1, i8* %__3, align 1 | 194 store i8 %v1, i8* %__3, align 1 |
196 %v2 = trunc i64 %v0 to i16 | 195 %v2 = trunc i64 %v0 to i16 |
197 %__5 = bitcast [2 x i8]* @i16v to i16* | 196 %__5 = bitcast [2 x i8]* @i16v to i16* |
198 store i16 %v2, i16* %__5, align 1 | 197 store i16 %v2, i16* %__5, align 1 |
199 %v3 = trunc i64 %v0 to i32 | 198 %v3 = trunc i64 %v0 to i32 |
200 %__7 = bitcast [4 x i8]* @i32v to i32* | 199 %__7 = bitcast [4 x i8]* @i32v to i32* |
201 store i32 %v3, i32* %__7, align 1 | 200 store i32 %v3, i32* %__7, align 1 |
202 ret void | 201 ret void |
203 } | 202 } |
204 ; CHECK-LABEL: from_uint64 | 203 ; CHECK-LABEL: from_uint64 |
205 ; CHECK: [24] | 204 ; CHECK: [.bss] |
206 ; CHECK: [0] | 205 ; CHECK: [.bss] |
207 ; CHECK: [2] | 206 ; CHECK: [.bss] |
208 ; CHECK: [4] | 207 ; CHECK: [.bss] |
OLD | NEW |