[X86] combineTargetShuffle - commute VPERMV3 shuffles so any load is on the RHS
[llvm-project.git] / llvm / test / CodeGen / SystemZ / fp-conv-02.ll
blob6be34b5596dab0bbe8be41bfb830be578fe23856
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
6 ; Test extensions of f32 to f64.
9 ; Check register extension.
10 define double @f1(float %val) {
11 ; CHECK-LABEL: f1:
12 ; CHECK:       # %bb.0:
13 ; CHECK-NEXT:    ldebr %f0, %f0
14 ; CHECK-NEXT:    br %r14
15   %res = fpext float %val to double
16   ret double %res
19 ; Check the low end of the LDEB range.
20 define double @f2(ptr %ptr) {
21 ; CHECK-LABEL: f2:
22 ; CHECK:       # %bb.0:
23 ; CHECK-NEXT:    ldeb %f0, 0(%r2)
24 ; CHECK-NEXT:    br %r14
25   %val = load float, ptr %ptr
26   %res = fpext float %val to double
27   ret double %res
30 ; Check the high end of the aligned LDEB range.
31 define double @f3(ptr %base) {
32 ; CHECK-LABEL: f3:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    ldeb %f0, 4092(%r2)
35 ; CHECK-NEXT:    br %r14
36   %ptr = getelementptr float, ptr %base, i64 1023
37   %val = load float, ptr %ptr
38   %res = fpext float %val to double
39   ret double %res
42 ; Check the next word up, which needs separate address logic.
43 ; Other sequences besides this one would be OK.
44 define double @f4(ptr %base) {
45 ; CHECK-LABEL: f4:
46 ; CHECK:       # %bb.0:
47 ; CHECK-NEXT:    aghi %r2, 4096
48 ; CHECK-NEXT:    ldeb %f0, 0(%r2)
49 ; CHECK-NEXT:    br %r14
50   %ptr = getelementptr float, ptr %base, i64 1024
51   %val = load float, ptr %ptr
52   %res = fpext float %val to double
53   ret double %res
56 ; Check negative displacements, which also need separate address logic.
57 define double @f5(ptr %base) {
58 ; CHECK-LABEL: f5:
59 ; CHECK:       # %bb.0:
60 ; CHECK-NEXT:    aghi %r2, -4
61 ; CHECK-NEXT:    ldeb %f0, 0(%r2)
62 ; CHECK-NEXT:    br %r14
63   %ptr = getelementptr float, ptr %base, i64 -1
64   %val = load float, ptr %ptr
65   %res = fpext float %val to double
66   ret double %res
69 ; Check that LDEB allows indices.
70 define double @f6(ptr %base, i64 %index) {
71 ; CHECK-LABEL: f6:
72 ; CHECK:       # %bb.0:
73 ; CHECK-NEXT:    sllg %r1, %r3, 2
74 ; CHECK-NEXT:    ldeb %f0, 400(%r1,%r2)
75 ; CHECK-NEXT:    br %r14
76   %ptr1 = getelementptr float, ptr %base, i64 %index
77   %ptr2 = getelementptr float, ptr %ptr1, i64 100
78   %val = load float, ptr %ptr2
79   %res = fpext float %val to double
80   ret double %res