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