[WebAssembly] Don't perform the returned-argument optimization on constants.
[oota-llvm.git] / test / CodeGen / ARM / aapcs-hfa.ll
1 ; RUN: llc < %s -float-abi=hard -debug-only arm-isel 2>&1 | FileCheck %s
2 ; RUN: llc < %s -float-abi=soft -debug-only arm-isel 2>&1 | FileCheck %s --check-prefix=SOFT
3 ; REQUIRES: asserts
4
5 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
6 target triple = "armv7-none--eabi"
7
8 ; SOFT-NOT: isHA
9
10 ; CHECK: isHA: 1 { float }
11 define void @f0b({ float } %a) {
12   ret void
13 }
14
15 ; CHECK: isHA: 1 { float, float }
16 define void @f1({ float, float } %a) {
17   ret void
18 }
19
20 ; CHECK: isHA: 1 { float, float, float }
21 define void @f1b({ float, float, float } %a) {
22   ret void
23 }
24
25 ; CHECK: isHA: 1 { float, float, float, float }
26 define void @f1c({ float, float, float, float } %a) {
27   ret void
28 }
29
30 ; CHECK: isHA: 0 { float, float, float, float, float }
31 define void @f2({ float, float, float, float, float } %a) {
32   ret void
33 }
34
35 ; CHECK: isHA: 1 { double }
36 define void @f3({ double } %a) {
37   ret void
38 }
39
40 ; CHECK: isHA: 1 { double, double, double, double }
41 define void @f4({ double, double, double, double } %a) {
42   ret void
43 }
44
45 ; CHECK: isHA: 0 { double, double, double, double, double }
46 define void @f5({ double, double, double, double, double } %a) {
47   ret void
48 }
49
50 ; CHECK: isHA: 0 { i32, i32 }
51 define void @f5b({ i32, i32 } %a) {
52   ret void
53 }
54
55 ; CHECK: isHA: 1 { [1 x float] }
56 define void @f6({ [1 x float] } %a) {
57   ret void
58 }
59
60 ; CHECK: isHA: 1 { [4 x float] }
61 define void @f7({ [4 x float] } %a) {
62   ret void
63 }
64
65 ; CHECK: isHA: 0 { [5 x float] }
66 define void @f8({ [5 x float] } %a) {
67   ret void
68 }
69
70 ; CHECK: isHA: 1 [1 x float]
71 define void @f6b([1 x float] %a) {
72   ret void
73 }
74
75 ; CHECK: isHA: 1 [4 x float]
76 define void @f7b([4 x float] %a) {
77   ret void
78 }
79
80 ; CHECK: isHA: 0 [5 x float]
81 define void @f8b([5 x float] %a) {
82   ret void
83 }
84
85 ; CHECK: isHA: 1 { [2 x float], [2 x float] }
86 define void @f9({ [2 x float], [2 x float] } %a) {
87   ret void
88 }
89
90 ; CHECK: isHA: 1 { [1 x float], [3 x float] }
91 define void @f9b({ [1 x float], [3 x float] } %a) {
92   ret void
93 }
94
95 ; CHECK: isHA: 0 { [3 x float], [3 x float] }
96 define void @f10({ [3 x float], [3 x float] } %a) {
97   ret void
98 }
99
100 ; CHECK: isHA: 1 { <2 x float> }
101 define void @f11({ <2 x float>  } %a) {
102   ret void
103 }
104
105 ; CHECK: isHA: 0 { <3 x float> }
106 define void @f12({ <3 x float>  } %a) {
107   ret void
108 }
109
110 ; CHECK: isHA: 1 { <4 x float> }
111 define void @f13({ <4 x float>  } %a) {
112   ret void
113 }
114
115 ; CHECK: isHA: 1 { <2 x float>, <2 x float> }
116 define void @f15({ <2 x float>, <2 x float>  } %a) {
117   ret void
118 }
119
120 ; CHECK: isHA: 0 { <2 x float>, float }
121 define void @f15b({ <2 x float>, float  } %a) {
122   ret void
123 }
124
125 ; CHECK: isHA: 0 { <2 x float>, [2 x float] }
126 define void @f15c({ <2 x float>, [2 x float]  } %a) {
127   ret void
128 }
129
130 ; CHECK: isHA: 0 { <2 x float>, <4 x float> }
131 define void @f16({ <2 x float>, <4 x float>  } %a) {
132   ret void
133 }
134
135 ; CHECK: isHA: 1 { <2 x double> }
136 define void @f17({ <2 x double>  } %a) {
137   ret void
138 }
139
140 ; CHECK: isHA: 1 { <2 x i32> }
141 define void @f18({ <2 x i32>  } %a) {
142   ret void
143 }
144
145 ; CHECK: isHA: 1 { <2 x i64>, <4 x i32> }
146 define void @f19({ <2 x i64>, <4 x i32> } %a) {
147   ret void
148 }
149
150 ; CHECK: isHA: 1 { [4 x <4 x float>] }
151 define void @f20({ [4 x <4 x float>]  } %a) {
152   ret void
153 }
154
155 ; CHECK: isHA: 0 { [5 x <4 x float>] }
156 define void @f21({ [5 x <4 x float>]  } %a) {
157   ret void
158 }
159
160 ; CHECK-NOT: isHA
161 define void @f22({ float } %a, ...) {
162   ret void
163 }
164