blob: 15d0d3ce5f681a0892700f0cfdc7d80ee70299cf [file] [log] [blame]
JF Bastien06ce03d2013-06-07 20:10:37 +00001; RUN: llc < %s -O0 -fast-isel-abort -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=v7
JF Bastien18db1f22013-06-14 02:49:43 +00002; RUN: llc < %s -O0 -fast-isel-abort -mtriple=armv7-linux-gnueabi | FileCheck %s --check-prefix=v7
JF Bastien06ce03d2013-06-07 20:10:37 +00003; RUN: llc < %s -O0 -fast-isel-abort -mtriple=armv4t-apple-ios | FileCheck %s --check-prefix=prev6
JF Bastien18db1f22013-06-14 02:49:43 +00004; RUN: llc < %s -O0 -fast-isel-abort -mtriple=armv4t-linux-gnueabi | FileCheck %s --check-prefix=prev6
JF Bastien06ce03d2013-06-07 20:10:37 +00005; RUN: llc < %s -O0 -fast-isel-abort -mtriple=armv5-apple-ios | FileCheck %s --check-prefix=prev6
JF Bastien18db1f22013-06-14 02:49:43 +00006; RUN: llc < %s -O0 -fast-isel-abort -mtriple=armv5-linux-gnueabi | FileCheck %s --check-prefix=prev6
JF Bastien06ce03d2013-06-07 20:10:37 +00007; RUN: llc < %s -O0 -fast-isel-abort -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=v7
8
9; Can't test pre-ARMv6 Thumb because ARM FastISel currently only supports
10; Thumb2. The ARMFastISel::ARMEmitIntExt code should work for Thumb by always
11; using two shifts.
12
13; Note that lsl, asr and lsr in Thumb are all encoded as 16-bit instructions
14; and therefore must set flags. {{s?}} below denotes this, instead of
15; duplicating tests.
16
17; zext
18
19define i8 @zext_1_8(i1 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +000020; v7-LABEL: zext_1_8:
JF Bastien06ce03d2013-06-07 20:10:37 +000021; v7: and r0, r0, #1
Stephen Lind24ab202013-07-14 06:24:09 +000022; prev6-LABEL: zext_1_8:
JF Bastien06ce03d2013-06-07 20:10:37 +000023; prev6: and r0, r0, #1
24 %r = zext i1 %a to i8
25 ret i8 %r
26}
27
28define i16 @zext_1_16(i1 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +000029; v7-LABEL: zext_1_16:
JF Bastien06ce03d2013-06-07 20:10:37 +000030; v7: and r0, r0, #1
Stephen Lind24ab202013-07-14 06:24:09 +000031; prev6-LABEL: zext_1_16:
JF Bastien06ce03d2013-06-07 20:10:37 +000032; prev6: and r0, r0, #1
33 %r = zext i1 %a to i16
34 ret i16 %r
35}
36
37define i32 @zext_1_32(i1 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +000038; v7-LABEL: zext_1_32:
JF Bastien06ce03d2013-06-07 20:10:37 +000039; v7: and r0, r0, #1
Stephen Lind24ab202013-07-14 06:24:09 +000040; prev6-LABEL: zext_1_32:
JF Bastien06ce03d2013-06-07 20:10:37 +000041; prev6: and r0, r0, #1
42 %r = zext i1 %a to i32
43 ret i32 %r
44}
45
46define i16 @zext_8_16(i8 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +000047; v7-LABEL: zext_8_16:
JF Bastien06ce03d2013-06-07 20:10:37 +000048; v7: and r0, r0, #255
Stephen Lind24ab202013-07-14 06:24:09 +000049; prev6-LABEL: zext_8_16:
JF Bastien06ce03d2013-06-07 20:10:37 +000050; prev6: and r0, r0, #255
51 %r = zext i8 %a to i16
52 ret i16 %r
53}
54
55define i32 @zext_8_32(i8 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +000056; v7-LABEL: zext_8_32:
JF Bastien06ce03d2013-06-07 20:10:37 +000057; v7: and r0, r0, #255
Stephen Lind24ab202013-07-14 06:24:09 +000058; prev6-LABEL: zext_8_32:
JF Bastien06ce03d2013-06-07 20:10:37 +000059; prev6: and r0, r0, #255
60 %r = zext i8 %a to i32
61 ret i32 %r
62}
63
64define i32 @zext_16_32(i16 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +000065; v7-LABEL: zext_16_32:
JF Bastien06ce03d2013-06-07 20:10:37 +000066; v7: uxth r0, r0
Stephen Lind24ab202013-07-14 06:24:09 +000067; prev6-LABEL: zext_16_32:
JF Bastien06ce03d2013-06-07 20:10:37 +000068; prev6: lsl{{s?}} r0, r0, #16
69; prev6: lsr{{s?}} r0, r0, #16
70 %r = zext i16 %a to i32
71 ret i32 %r
72}
73
74; sext
75
76define i8 @sext_1_8(i1 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +000077; v7-LABEL: sext_1_8:
JF Bastien06ce03d2013-06-07 20:10:37 +000078; v7: lsl{{s?}} r0, r0, #31
79; v7: asr{{s?}} r0, r0, #31
Stephen Lind24ab202013-07-14 06:24:09 +000080; prev6-LABEL: sext_1_8:
JF Bastien06ce03d2013-06-07 20:10:37 +000081; prev6: lsl{{s?}} r0, r0, #31
82; prev6: asr{{s?}} r0, r0, #31
83 %r = sext i1 %a to i8
84 ret i8 %r
85}
86
87define i16 @sext_1_16(i1 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +000088; v7-LABEL: sext_1_16:
JF Bastien06ce03d2013-06-07 20:10:37 +000089; v7: lsl{{s?}} r0, r0, #31
90; v7: asr{{s?}} r0, r0, #31
Stephen Lind24ab202013-07-14 06:24:09 +000091; prev6-LABEL: sext_1_16:
JF Bastien06ce03d2013-06-07 20:10:37 +000092; prev6: lsl{{s?}} r0, r0, #31
93; prev6: asr{{s?}} r0, r0, #31
94 %r = sext i1 %a to i16
95 ret i16 %r
96}
97
98define i32 @sext_1_32(i1 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +000099; v7-LABEL: sext_1_32:
JF Bastien06ce03d2013-06-07 20:10:37 +0000100; v7: lsl{{s?}} r0, r0, #31
101; v7: asr{{s?}} r0, r0, #31
Stephen Lind24ab202013-07-14 06:24:09 +0000102; prev6-LABEL: sext_1_32:
JF Bastien06ce03d2013-06-07 20:10:37 +0000103; prev6: lsl{{s?}} r0, r0, #31
104; prev6: asr{{s?}} r0, r0, #31
105 %r = sext i1 %a to i32
106 ret i32 %r
107}
108
109define i16 @sext_8_16(i8 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +0000110; v7-LABEL: sext_8_16:
JF Bastien06ce03d2013-06-07 20:10:37 +0000111; v7: sxtb r0, r0
Stephen Lind24ab202013-07-14 06:24:09 +0000112; prev6-LABEL: sext_8_16:
JF Bastien06ce03d2013-06-07 20:10:37 +0000113; prev6: lsl{{s?}} r0, r0, #24
114; prev6: asr{{s?}} r0, r0, #24
115 %r = sext i8 %a to i16
116 ret i16 %r
117}
118
119define i32 @sext_8_32(i8 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +0000120; v7-LABEL: sext_8_32:
JF Bastien06ce03d2013-06-07 20:10:37 +0000121; v7: sxtb r0, r0
Stephen Lind24ab202013-07-14 06:24:09 +0000122; prev6-LABEL: sext_8_32:
JF Bastien06ce03d2013-06-07 20:10:37 +0000123; prev6: lsl{{s?}} r0, r0, #24
124; prev6: asr{{s?}} r0, r0, #24
125 %r = sext i8 %a to i32
126 ret i32 %r
127}
128
129define i32 @sext_16_32(i16 %a) nounwind ssp {
Stephen Lind24ab202013-07-14 06:24:09 +0000130; v7-LABEL: sext_16_32:
JF Bastien06ce03d2013-06-07 20:10:37 +0000131; v7: sxth r0, r0
Stephen Lind24ab202013-07-14 06:24:09 +0000132; prev6-LABEL: sext_16_32:
JF Bastien06ce03d2013-06-07 20:10:37 +0000133; prev6: lsl{{s?}} r0, r0, #16
134; prev6: asr{{s?}} r0, r0, #16
135 %r = sext i16 %a to i32
136 ret i32 %r
137}