xref: /llvm-project/llvm/test/CodeGen/SystemZ/function-attributes-01.ll (revision a1710eb3cd5823c5d14899112ca3086acbdbe9cb)
1; RUN: llc < %s -mtriple=s390x-linux-gnu \
2; RUN:   | FileCheck %s --check-prefixes=CHECK,DEFAULT
3; RUN: llc < %s -mtriple=s390x-linux-gnu -mattr=soft-float \
4; RUN:   | FileCheck %s --check-prefixes=CHECK,SOFT-FLOAT
5; RUN: llc < %s -mtriple=s390x-linux-gnu -mattr=-soft-float \
6; RUN:   | FileCheck %s --check-prefixes=CHECK,NO-SOFT-FL
7; RUN: llc < %s -mtriple=s390x-linux-gnu -mattr=-vector \
8; RUN:   | FileCheck %s --check-prefixes=CHECK,NO-VECTOR
9;
10; Test per function attributes and command line arguments that override them.
11
12attributes #1 = { "target-cpu"="z14" "target-features"="+vector" "use-soft-float"="false" }
13define double @fun1(ptr %A) #1 {
14; CHECK-LABEL: fun1:
15; DEFAULT:     ld %f0, 0(%r2)
16; SOFT-FLOAT:  lg %r2, 0(%r2)
17; NO-SOFT-FL:  ld %f0, 0(%r2)
18; NO-VECTOR:   ld %f0, 0(%r2)
19; CHECK-NEXT:  br %r14
20entry:
21  %0 = load double, ptr %A
22  ret double %0
23}
24
25attributes #2 = { "target-cpu"="z14" "target-features"="+vector" "use-soft-float"="true" }
26define double @fun2(ptr %A) #2 {
27; CHECK-LABEL: fun2:
28; DEFAULT:     lg %r2, 0(%r2)
29; SOFT-FLOAT:  lg %r2, 0(%r2)
30; NO-SOFT-FL:  lg %r2, 0(%r2)
31; NO-VECTOR:   lg %r2, 0(%r2)
32; CHECK-NEXT:  br %r14
33entry:
34  %0 = load double, ptr %A
35  ret double %0
36}
37
38attributes #3 = { "target-cpu"="z14" "target-features"="+vector" "use-soft-float"="false" }
39define <2 x double> @fun3(ptr %A) #3 {
40; CHECK-LABEL:     fun3:
41; DEFAULT:         vl %v24, 0(%r2), 3
42; SOFT-FLOAT:      lg %r0, 0(%r2)
43; SOFT-FLOAT-NEXT: lg %r3, 8(%r2)
44; SOFT-FLOAT-NEXT: lgr %r2, %r0
45; NO-SOFT-FL:      vl %v24, 0(%r2), 3
46; NO-VECTOR:       ld %f0, 0(%r2)
47; NO-VECTOR-NEXT:  ld %f2, 8(%r2)
48; CHECK-NEXT:      br %r14
49entry:
50  %0 = load <2 x double>, ptr %A
51  ret <2 x double> %0
52}
53
54attributes #4 = { "target-cpu"="z14" "target-features"="+vector" "use-soft-float"="true" }
55define <2 x double> @fun4(ptr %A) #4 {
56; CHECK-LABEL:     fun4:
57; DEFAULT:         lg %r0, 0(%r2)
58; DEFAULT-NEXT:    lg %r3, 8(%r2)
59; DEFAULT-NEXT:    lgr %r2, %r0
60; SOFT-FLOAT:      lg %r0, 0(%r2)
61; SOFT-FLOAT-NEXT: lg %r3, 8(%r2)
62; SOFT-FLOAT-NEXT: lgr %r2, %r0
63; NO-SOFT-FL:      lg %r0, 0(%r2)
64; NO-SOFT-FL-NEXT: lg %r3, 8(%r2)
65; NO-SOFT-FL-NEXT: lgr %r2, %r0
66; NO-VECTOR:       lg %r0, 0(%r2)
67; NO-VECTOR-NEXT:  lg %r3, 8(%r2)
68; NO-VECTOR-NEXT:  lgr %r2, %r0
69; CHECK-NEXT:      br %r14
70entry:
71  %0 = load <2 x double>, ptr %A
72  ret <2 x double> %0
73}
74
75attributes #5 = { "target-cpu"="z14" "target-features"="-vector" "use-soft-float"="false" }
76define <2 x double> @fun5(ptr %A) #5 {
77; CHECK-LABEL:     fun5:
78; DEFAULT:         ld %f0, 0(%r2)
79; DEFAULT-NEXT:    ld %f2, 8(%r2)
80; SOFT-FLOAT:      lg %r0, 0(%r2)
81; SOFT-FLOAT-NEXT: lg %r3, 8(%r2)
82; SOFT-FLOAT-NEXT: lgr %r2, %r0
83; NO-SOFT-FL:      ld %f0, 0(%r2)
84; NO-SOFT-FL-NEXT: ld %f2, 8(%r2)
85; NO-VECTOR:       ld %f0, 0(%r2)
86; NO-VECTOR-NEXT:  ld %f2, 8(%r2)
87; CHECK-NEXT:      br %r14
88entry:
89  %0 = load <2 x double>, ptr %A
90  ret <2 x double> %0
91}
92
93attributes #6 = { "target-cpu"="zEC12" "use-soft-float"="false" }
94define <2 x double> @fun6(ptr %A) #6 {
95; CHECK-LABEL:     fun6:
96; DEFAULT:         ld %f0, 0(%r2)
97; DEFAULT-NEXT:    ld %f2, 8(%r2)
98; SOFT-FLOAT:      lg %r0, 0(%r2)
99; SOFT-FLOAT-NEXT: lg %r3, 8(%r2)
100; SOFT-FLOAT-NEXT: lgr %r2, %r0
101; NO-SOFT-FL:      ld %f0, 0(%r2)
102; NO-SOFT-FL-NEXT: ld %f2, 8(%r2)
103; NO-VECTOR:       ld %f0, 0(%r2)
104; NO-VECTOR-NEXT:  ld %f2, 8(%r2)
105; CHECK-NEXT:      br %r14
106entry:
107  %0 = load <2 x double>, ptr %A
108  ret <2 x double> %0
109}
110
111attributes #7 = { "target-cpu"="zEC12" "target-features"="+vector" "use-soft-float"="false" }
112define <2 x double> @fun7(ptr %A) #7 {
113; CHECK-LABEL:     fun7:
114; DEFAULT:         vl %v24, 0(%r2), 3
115; SOFT-FLOAT:      lg %r0, 0(%r2)
116; SOFT-FLOAT-NEXT: lg %r3, 8(%r2)
117; SOFT-FLOAT-NEXT: lgr %r2, %r0
118; NO-SOFT-FL:      vl %v24, 0(%r2), 3
119; NO-VECTOR:       ld %f0, 0(%r2)
120; NO-VECTOR-NEXT:  ld %f2, 8(%r2)
121; CHECK-NEXT:      br %r14
122entry:
123  %0 = load <2 x double>, ptr %A
124  ret <2 x double> %0
125}
126