[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / GlobalISel / ext.ll
bloba54656b55a6b5eed6eb2dfda894388ac8e2b5b48
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=x86_64-linux-gnu    -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=X64
3 ; RUN: llc -mtriple=i386-linux-gnu      -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=X32
5 define i8 @test_zext_i1toi8(i32 %a) {
6 ; X64-LABEL: test_zext_i1toi8:
7 ; X64:       # %bb.0:
8 ; X64-NEXT:    movl %edi, %eax
9 ; X64-NEXT:    andb $1, %al
10 ; X64-NEXT:    # kill: def $al killed $al killed $eax
11 ; X64-NEXT:    retq
13 ; X32-LABEL: test_zext_i1toi8:
14 ; X32:       # %bb.0:
15 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
16 ; X32-NEXT:    andb $1, %al
17 ; X32-NEXT:    # kill: def $al killed $al killed $eax
18 ; X32-NEXT:    retl
19   %val = trunc i32 %a to i1
20   %r = zext i1 %val to i8
21   ret i8 %r
24 define i16 @test_zext_i1toi16(i32 %a) {
25 ; X64-LABEL: test_zext_i1toi16:
26 ; X64:       # %bb.0:
27 ; X64-NEXT:    movl %edi, %eax
28 ; X64-NEXT:    andw $1, %ax
29 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax
30 ; X64-NEXT:    retq
32 ; X32-LABEL: test_zext_i1toi16:
33 ; X32:       # %bb.0:
34 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
35 ; X32-NEXT:    andw $1, %ax
36 ; X32-NEXT:    # kill: def $ax killed $ax killed $eax
37 ; X32-NEXT:    retl
38   %val = trunc i32 %a to i1
39   %r = zext i1 %val to i16
40   ret i16 %r
43 define i32 @test_zext_i1(i32 %a) {
44 ; X64-LABEL: test_zext_i1:
45 ; X64:       # %bb.0:
46 ; X64-NEXT:    movl %edi, %eax
47 ; X64-NEXT:    andl $1, %eax
48 ; X64-NEXT:    retq
50 ; X32-LABEL: test_zext_i1:
51 ; X32:       # %bb.0:
52 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
53 ; X32-NEXT:    andl $1, %eax
54 ; X32-NEXT:    retl
55   %val = trunc i32 %a to i1
56   %r = zext i1 %val to i32
57   ret i32 %r
60 define i32 @test_zext_i8(i8 %val) {
61 ; X64-LABEL: test_zext_i8:
62 ; X64:       # %bb.0:
63 ; X64-NEXT:    movzbl %dil, %eax
64 ; X64-NEXT:    retq
66 ; X32-LABEL: test_zext_i8:
67 ; X32:       # %bb.0:
68 ; X32-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
69 ; X32-NEXT:    retl
70   %r = zext i8 %val to i32
71   ret i32 %r
74 define i32 @test_zext_i16(i16 %val) {
75 ; X64-LABEL: test_zext_i16:
76 ; X64:       # %bb.0:
77 ; X64-NEXT:    movzwl %di, %eax
78 ; X64-NEXT:    retq
80 ; X32-LABEL: test_zext_i16:
81 ; X32:       # %bb.0:
82 ; X32-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
83 ; X32-NEXT:    retl
84   %r = zext i16 %val to i32
85   ret i32 %r
88 define i32 @test_sext_i8(i8 %val) {
89 ; X64-LABEL: test_sext_i8:
90 ; X64:       # %bb.0:
91 ; X64-NEXT:    movl %edi, %eax
92 ; X64-NEXT:    movl $24, %ecx
93 ; X64-NEXT:    shll %cl, %eax
94 ; X64-NEXT:    movl $24, %ecx
95 ; X64-NEXT:    sarl %cl, %eax
96 ; X64-NEXT:    retq
98 ; X32-LABEL: test_sext_i8:
99 ; X32:       # %bb.0:
100 ; X32-NEXT:    movsbl {{[0-9]+}}(%esp), %eax
101 ; X32-NEXT:    retl
102   %r = sext i8 %val to i32
103   ret i32 %r
106 define i32 @test_sext_i16(i16 %val) {
107 ; X64-LABEL: test_sext_i16:
108 ; X64:       # %bb.0:
109 ; X64-NEXT:    movl %edi, %eax
110 ; X64-NEXT:    movl $16, %ecx
111 ; X64-NEXT:    shll %cl, %eax
112 ; X64-NEXT:    movl $16, %ecx
113 ; X64-NEXT:    sarl %cl, %eax
114 ; X64-NEXT:    retq
116 ; X32-LABEL: test_sext_i16:
117 ; X32:       # %bb.0:
118 ; X32-NEXT:    movswl {{[0-9]+}}(%esp), %eax
119 ; X32-NEXT:    retl
120   %r = sext i16 %val to i32
121   ret i32 %r