OLD | NEW |
1 ; Trivial smoke test of bitcast between integer and FP types. | 1 ; Trivial smoke test of bitcast between integer and FP types. |
2 | 2 |
3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s | 3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s |
4 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s | 4 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s |
5 | 5 |
6 define internal i32 @cast_f2i(float %f) { | 6 define internal i32 @cast_f2i(float %f) { |
7 entry: | 7 entry: |
8 %v0 = bitcast float %f to i32 | 8 %v0 = bitcast float %f to i32 |
9 ret i32 %v0 | 9 ret i32 %v0 |
10 } | 10 } |
11 ; CHECK-LABEL: cast_f2i | 11 ; CHECK-LABEL: cast_f2i |
12 ; CHECK: mov eax | 12 ; CHECK: mov eax |
13 ; CHECK: ret | |
14 | 13 |
15 define internal float @cast_i2f(i32 %i) { | 14 define internal float @cast_i2f(i32 %i) { |
16 entry: | 15 entry: |
17 %v0 = bitcast i32 %i to float | 16 %v0 = bitcast i32 %i to float |
18 ret float %v0 | 17 ret float %v0 |
19 } | 18 } |
20 ; CHECK-LABEL: cast_i2f | 19 ; CHECK-LABEL: cast_i2f |
21 ; CHECK: fld DWORD PTR | 20 ; CHECK: fld DWORD PTR |
22 ; CHECK: ret | |
23 | 21 |
24 define internal i64 @cast_d2ll(double %d) { | 22 define internal i64 @cast_d2ll(double %d) { |
25 entry: | 23 entry: |
26 %v0 = bitcast double %d to i64 | 24 %v0 = bitcast double %d to i64 |
27 ret i64 %v0 | 25 ret i64 %v0 |
28 } | 26 } |
29 ; CHECK-LABEL: cast_d2ll | 27 ; CHECK-LABEL: cast_d2ll |
30 ; CHECK: mov edx | 28 ; CHECK: mov edx |
31 ; CHECK: ret | |
32 | 29 |
33 define internal i64 @cast_d2ll_const() { | 30 define internal i64 @cast_d2ll_const() { |
34 entry: | 31 entry: |
35 %v0 = bitcast double 0x12345678901234 to i64 | 32 %v0 = bitcast double 0x12345678901234 to i64 |
36 ret i64 %v0 | 33 ret i64 %v0 |
37 } | 34 } |
38 ; CHECK-LABEL: cast_d2ll_const | 35 ; CHECK-LABEL: cast_d2ll_const |
39 ; CHECK: movsd xmm{{.*}},QWORD PTR | 36 ; CHECK: mov e{{..}},DWORD PTR ds:0x0 {{.*}} .L$double$0 |
40 ; CHECK: mov edx | 37 ; CHECK: mov e{{..}},DWORD PTR ds:0x4 {{.*}} .L$double$0 |
41 ; CHECK: ret | |
42 | 38 |
43 define internal double @cast_ll2d(i64 %ll) { | 39 define internal double @cast_ll2d(i64 %ll) { |
44 entry: | 40 entry: |
45 %v0 = bitcast i64 %ll to double | 41 %v0 = bitcast i64 %ll to double |
46 ret double %v0 | 42 ret double %v0 |
47 } | 43 } |
48 ; CHECK-LABEL: cast_ll2d | 44 ; CHECK-LABEL: cast_ll2d |
49 ; CHECK: fld QWORD PTR | 45 ; CHECK: fld QWORD PTR |
50 ; CHECK: ret | |
51 | 46 |
52 define internal double @cast_ll2d_const() { | 47 define internal double @cast_ll2d_const() { |
53 entry: | 48 entry: |
54 %v0 = bitcast i64 12345678901234 to double | 49 %v0 = bitcast i64 12345678901234 to double |
55 ret double %v0 | 50 ret double %v0 |
56 } | 51 } |
57 ; CHECK-LABEL: cast_ll2d_const | 52 ; CHECK-LABEL: cast_ll2d_const |
58 ; CHECK: mov {{.*}},0x73ce2ff2 | 53 ; CHECK: mov {{.*}},0x73ce2ff2 |
59 ; CHECK: mov {{.*}},0xb3a | 54 ; CHECK: mov {{.*}},0xb3a |
60 ; CHECK: fld QWORD PTR | 55 ; CHECK: fld QWORD PTR |
61 ; CHECK: ret | |
OLD | NEW |