blob: 0adb5a9351090264832f8428f19be1957e1cc574 [file] [log] [blame]
Stephen Hines37ed9c12014-12-01 14:51:49 -08001; FIXME: FastISel currently returns false if it hits code that uses VSX
Pirama Arumuga Nainar4c5e43d2015-04-08 08:55:49 -07002; registers and with -fast-isel-abort=1 turned on the test case will then fail.
Stephen Hines37ed9c12014-12-01 14:51:49 -08003; When fastisel better supports VSX fix up this test case.
4;
Pirama Arumuga Nainar4c5e43d2015-04-08 08:55:49 -07005; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -mattr=-vsx | FileCheck %s --check-prefix=ELF64
Stephen Hines37ed9c12014-12-01 14:51:49 -08006
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -08007define zeroext i1 @rettrue() nounwind {
Stephen Hines37ed9c12014-12-01 14:51:49 -08008entry:
9; ELF64-LABEL: rettrue
10; ELF64: li 3, 1
11; ELF64: blr
12 ret i1 true
13}
14
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -080015define zeroext i1 @retfalse() nounwind {
Stephen Hines37ed9c12014-12-01 14:51:49 -080016entry:
17; ELF64-LABEL: retfalse
18; ELF64: li 3, 0
19; ELF64: blr
20 ret i1 false
21}
22
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -080023define signext i1 @retstrue() nounwind {
Stephen Hines37ed9c12014-12-01 14:51:49 -080024entry:
25; ELF64-LABEL: retstrue
26; ELF64: li 3, -1
27; ELF64: blr
28 ret i1 true
29}
30
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -080031define signext i1 @retsfalse() nounwind {
Stephen Hines37ed9c12014-12-01 14:51:49 -080032entry:
33; ELF64-LABEL: retsfalse
34; ELF64: li 3, 0
35; ELF64: blr
36 ret i1 false
37}
Bill Schmidt055d2072013-08-26 19:42:51 +000038
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -080039define signext i8 @ret2(i8 signext %a) nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +000040entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -080041; ELF64-LABEL: ret2
Bill Schmidt055d2072013-08-26 19:42:51 +000042; ELF64: extsb
43; ELF64: blr
44 ret i8 %a
45}
46
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -080047define zeroext i8 @ret3(i8 signext %a) nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +000048entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -080049; ELF64-LABEL: ret3
Bill Schmidt055d2072013-08-26 19:42:51 +000050; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 56
51; ELF64: blr
52 ret i8 %a
53}
54
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -080055define signext i16 @ret4(i16 signext %a) nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +000056entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -080057; ELF64-LABEL: ret4
Bill Schmidt055d2072013-08-26 19:42:51 +000058; ELF64: extsh
59; ELF64: blr
60 ret i16 %a
61}
62
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -080063define zeroext i16 @ret5(i16 signext %a) nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +000064entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -080065; ELF64-LABEL: ret5
Bill Schmidt055d2072013-08-26 19:42:51 +000066; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 48
67; ELF64: blr
68 ret i16 %a
69}
70
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -080071define i16 @ret6(i16 %a) nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +000072entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -080073; ELF64-LABEL: ret6
Bill Schmidt055d2072013-08-26 19:42:51 +000074; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 48
75; ELF64: blr
76 ret i16 %a
77}
78
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -080079define signext i32 @ret7(i32 signext %a) nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +000080entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -080081; ELF64-LABEL: ret7
Bill Schmidt055d2072013-08-26 19:42:51 +000082; ELF64: extsw
83; ELF64: blr
84 ret i32 %a
85}
86
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -080087define zeroext i32 @ret8(i32 signext %a) nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +000088entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -080089; ELF64-LABEL: ret8
Bill Schmidt055d2072013-08-26 19:42:51 +000090; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 32
91; ELF64: blr
92 ret i32 %a
93}
94
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -080095define i32 @ret9(i32 %a) nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +000096entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -080097; ELF64-LABEL: ret9
Bill Schmidt055d2072013-08-26 19:42:51 +000098; ELF64: rldicl {{[0-9]+}}, {{[0-9]+}}, 0, 32
99; ELF64: blr
100 ret i32 %a
101}
102
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -0800103define i64 @ret10(i64 %a) nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +0000104entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -0800105; ELF64-LABEL: ret10
Bill Schmidt055d2072013-08-26 19:42:51 +0000106; ELF64-NOT: exts
107; ELF64-NOT: rldicl
108; ELF64: blr
109 ret i64 %a
110}
111
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -0800112define float @ret11(float %a) nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +0000113entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -0800114; ELF64-LABEL: ret11
Bill Schmidt055d2072013-08-26 19:42:51 +0000115; ELF64: blr
116 ret float %a
117}
118
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -0800119define double @ret12(double %a) nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +0000120entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -0800121; ELF64-LABEL: ret12
Bill Schmidt055d2072013-08-26 19:42:51 +0000122; ELF64: blr
123 ret double %a
124}
125
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -0800126define i8 @ret13() nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +0000127entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -0800128; ELF64-LABEL: ret13
Bill Schmidt055d2072013-08-26 19:42:51 +0000129; ELF64: li
130; ELF64: blr
131 ret i8 15;
132}
133
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -0800134define i16 @ret14() nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +0000135entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -0800136; ELF64-LABEL: ret14
Bill Schmidt055d2072013-08-26 19:42:51 +0000137; ELF64: li
138; ELF64: blr
139 ret i16 -225;
140}
141
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -0800142define i32 @ret15() nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +0000143entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -0800144; ELF64-LABEL: ret15
Bill Schmidt055d2072013-08-26 19:42:51 +0000145; ELF64: lis
146; ELF64: ori
147; ELF64: blr
148 ret i32 278135;
149}
150
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -0800151define i64 @ret16() nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +0000152entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -0800153; ELF64-LABEL: ret16
Bill Schmidt055d2072013-08-26 19:42:51 +0000154; ELF64: li
155; ELF64: sldi
156; ELF64: oris
157; ELF64: ori
158; ELF64: blr
159 ret i64 27813515225;
160}
161
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -0800162define float @ret17() nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +0000163entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -0800164; ELF64-LABEL: ret17
Bill Schmidt055d2072013-08-26 19:42:51 +0000165; ELF64: addis
166; ELF64: lfs
167; ELF64: blr
168 ret float 2.5;
169}
170
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -0800171define double @ret18() nounwind {
Bill Schmidt055d2072013-08-26 19:42:51 +0000172entry:
Stephen Hines37ed9c12014-12-01 14:51:49 -0800173; ELF64-LABEL: ret18
Bill Schmidt055d2072013-08-26 19:42:51 +0000174; ELF64: addis
175; ELF64: lfd
176; ELF64: blr
177 ret double 2.5e-33;
178}
Pirama Arumuga Nainarf3ef5332016-03-03 15:48:50 -0800179
180define zeroext i32 @ret19() nounwind {
181entry:
182; ELF64-LABEL: ret19
183; ELF64: li
184; ELF64: oris
185; ELF64: ori
186; ELF64: blr
187 ret i32 -1
188}
Pirama Arumuga Nainarde2d8692016-09-19 22:57:26 -0700189
190define zeroext i16 @ret20() nounwind {
191entry:
192; ELF64-LABEL: ret20
193; ELF64: lis{{.*}}0
194; ELF64: ori{{.*}}32768
195; ELF64: blr
196 ret i16 32768
197}