| 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 |