1 ; RUN: llc < %s -O0 -fast-isel-abort -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=v7
2 ; RUN: llc < %s -O0 -fast-isel-abort -mtriple=armv4t-apple-ios | FileCheck %s --check-prefix=prev6
3 ; RUN: llc < %s -O0 -fast-isel-abort -mtriple=armv5-apple-ios | FileCheck %s --check-prefix=prev6
4 ; RUN: llc < %s -O0 -fast-isel-abort -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=v7
6 ; Can't test pre-ARMv6 Thumb because ARM FastISel currently only supports
7 ; Thumb2. The ARMFastISel::ARMEmitIntExt code should work for Thumb by always
10 ; Note that lsl, asr and lsr in Thumb are all encoded as 16-bit instructions
11 ; and therefore must set flags. {{s?}} below denotes this, instead of
16 define i8 @zext_1_8(i1 %a) nounwind ssp {
20 ; prev6: and r0, r0, #1
25 define i16 @zext_1_16(i1 %a) nounwind ssp {
29 ; prev6: and r0, r0, #1
30 %r = zext i1 %a to i16
34 define i32 @zext_1_32(i1 %a) nounwind ssp {
38 ; prev6: and r0, r0, #1
39 %r = zext i1 %a to i32
43 define i16 @zext_8_16(i8 %a) nounwind ssp {
45 ; v7: and r0, r0, #255
47 ; prev6: and r0, r0, #255
48 %r = zext i8 %a to i16
52 define i32 @zext_8_32(i8 %a) nounwind ssp {
54 ; v7: and r0, r0, #255
56 ; prev6: and r0, r0, #255
57 %r = zext i8 %a to i32
61 define i32 @zext_16_32(i16 %a) nounwind ssp {
65 ; prev6: lsl{{s?}} r0, r0, #16
66 ; prev6: lsr{{s?}} r0, r0, #16
67 %r = zext i16 %a to i32
73 define i8 @sext_1_8(i1 %a) nounwind ssp {
75 ; v7: lsl{{s?}} r0, r0, #31
76 ; v7: asr{{s?}} r0, r0, #31
78 ; prev6: lsl{{s?}} r0, r0, #31
79 ; prev6: asr{{s?}} r0, r0, #31
84 define i16 @sext_1_16(i1 %a) nounwind ssp {
86 ; v7: lsl{{s?}} r0, r0, #31
87 ; v7: asr{{s?}} r0, r0, #31
89 ; prev6: lsl{{s?}} r0, r0, #31
90 ; prev6: asr{{s?}} r0, r0, #31
91 %r = sext i1 %a to i16
95 define i32 @sext_1_32(i1 %a) nounwind ssp {
97 ; v7: lsl{{s?}} r0, r0, #31
98 ; v7: asr{{s?}} r0, r0, #31
100 ; prev6: lsl{{s?}} r0, r0, #31
101 ; prev6: asr{{s?}} r0, r0, #31
102 %r = sext i1 %a to i32
106 define i16 @sext_8_16(i8 %a) nounwind ssp {
110 ; prev6: lsl{{s?}} r0, r0, #24
111 ; prev6: asr{{s?}} r0, r0, #24
112 %r = sext i8 %a to i16
116 define i32 @sext_8_32(i8 %a) nounwind ssp {
120 ; prev6: lsl{{s?}} r0, r0, #24
121 ; prev6: asr{{s?}} r0, r0, #24
122 %r = sext i8 %a to i32
126 define i32 @sext_16_32(i16 %a) nounwind ssp {
130 ; prev6: lsl{{s?}} r0, r0, #16
131 ; prev6: asr{{s?}} r0, r0, #16
132 %r = sext i16 %a to i32