1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2
- ; RUN: llc < %s -mtriple=aarch64 | FileCheck %s
2
+ ; RUN: llc < %s -mtriple=aarch64 | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3
+ ; RUN: llc < %s -mtriple=aarch64 -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI
3
4
4
5
define i1 @load_bv_v4i8 (i1 zeroext %a ) {
5
6
; CHECK-LABEL: load_bv_v4i8:
@@ -11,18 +12,31 @@ define i1 @load_bv_v4i8(i1 zeroext %a) {
11
12
}
12
13
13
14
define noundef i1 @logger (i32 noundef %logLevel , ptr %ea , ptr %pll ) {
14
- ; CHECK-LABEL: logger:
15
- ; CHECK: // %bb.0: // %entry
16
- ; CHECK-NEXT: ldr w8, [x2]
17
- ; CHECK-NEXT: cmp w8, w0
18
- ; CHECK-NEXT: b.ls .LBB1_2
19
- ; CHECK-NEXT: // %bb.1:
20
- ; CHECK-NEXT: mov w0, wzr
21
- ; CHECK-NEXT: ret
22
- ; CHECK-NEXT: .LBB1_2: // %land.rhs
23
- ; CHECK-NEXT: ldr x8, [x1]
24
- ; CHECK-NEXT: ldrb w0, [x8]
25
- ; CHECK-NEXT: ret
15
+ ; CHECK-SD-LABEL: logger:
16
+ ; CHECK-SD: // %bb.0: // %entry
17
+ ; CHECK-SD-NEXT: ldr w8, [x2]
18
+ ; CHECK-SD-NEXT: cmp w8, w0
19
+ ; CHECK-SD-NEXT: b.ls .LBB1_2
20
+ ; CHECK-SD-NEXT: // %bb.1:
21
+ ; CHECK-SD-NEXT: mov w0, wzr
22
+ ; CHECK-SD-NEXT: ret
23
+ ; CHECK-SD-NEXT: .LBB1_2: // %land.rhs
24
+ ; CHECK-SD-NEXT: ldr x8, [x1]
25
+ ; CHECK-SD-NEXT: ldrb w0, [x8]
26
+ ; CHECK-SD-NEXT: ret
27
+ ;
28
+ ; CHECK-GI-LABEL: logger:
29
+ ; CHECK-GI: // %bb.0: // %entry
30
+ ; CHECK-GI-NEXT: ldr w8, [x2]
31
+ ; CHECK-GI-NEXT: cmp w8, w0
32
+ ; CHECK-GI-NEXT: mov w0, wzr
33
+ ; CHECK-GI-NEXT: b.hi .LBB1_2
34
+ ; CHECK-GI-NEXT: // %bb.1: // %land.rhs
35
+ ; CHECK-GI-NEXT: ldr x8, [x1]
36
+ ; CHECK-GI-NEXT: ldrb w8, [x8]
37
+ ; CHECK-GI-NEXT: and w0, w8, #0x1
38
+ ; CHECK-GI-NEXT: .LBB1_2: // %land.end
39
+ ; CHECK-GI-NEXT: ret
26
40
entry:
27
41
%0 = load i32 , ptr %pll , align 4
28
42
%cmp.not = icmp ugt i32 %0 , %logLevel
@@ -44,30 +58,51 @@ land.end: ; preds = %land.rhs, %entry
44
58
45
59
declare i64 @llvm.ctlz.i64 (i64 %in , i1 )
46
60
define i1 @lshr_ctlz_undef_cmpeq_one_i64 (i64 %in ) {
47
- ; CHECK-LABEL: lshr_ctlz_undef_cmpeq_one_i64:
48
- ; CHECK: // %bb.0:
49
- ; CHECK-NEXT: clz x8, x0
50
- ; CHECK-NEXT: lsr x0, x8, #6
51
- ; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
52
- ; CHECK-NEXT: ret
61
+ ; CHECK-SD-LABEL: lshr_ctlz_undef_cmpeq_one_i64:
62
+ ; CHECK-SD: // %bb.0:
63
+ ; CHECK-SD-NEXT: clz x8, x0
64
+ ; CHECK-SD-NEXT: lsr x0, x8, #6
65
+ ; CHECK-SD-NEXT: // kill: def $w0 killed $w0 killed $x0
66
+ ; CHECK-SD-NEXT: ret
67
+ ;
68
+ ; CHECK-GI-LABEL: lshr_ctlz_undef_cmpeq_one_i64:
69
+ ; CHECK-GI: // %bb.0:
70
+ ; CHECK-GI-NEXT: clz x8, x0
71
+ ; CHECK-GI-NEXT: lsr x8, x8, #6
72
+ ; CHECK-GI-NEXT: cmp x8, #1
73
+ ; CHECK-GI-NEXT: cset w0, eq
74
+ ; CHECK-GI-NEXT: ret
53
75
%ctlz = call i64 @llvm.ctlz.i64 (i64 %in , i1 -1 )
54
76
%lshr = lshr i64 %ctlz , 6
55
77
%icmp = icmp eq i64 %lshr , 1
56
78
ret i1 %icmp
57
79
}
58
80
59
81
define i32 @PR17487 (i1 %tobool ) {
60
- ; CHECK-LABEL: PR17487:
61
- ; CHECK: // %bb.0:
62
- ; CHECK-NEXT: dup v0.2s, w0
63
- ; CHECK-NEXT: mov w8, #1 // =0x1
64
- ; CHECK-NEXT: dup v1.2d, x8
65
- ; CHECK-NEXT: ushll v0.2d, v0.2s, #0
66
- ; CHECK-NEXT: bic v0.16b, v1.16b, v0.16b
67
- ; CHECK-NEXT: mov x8, v0.d[1]
68
- ; CHECK-NEXT: cmp x8, #1
69
- ; CHECK-NEXT: cset w0, ne
70
- ; CHECK-NEXT: ret
82
+ ; CHECK-SD-LABEL: PR17487:
83
+ ; CHECK-SD: // %bb.0:
84
+ ; CHECK-SD-NEXT: dup v0.2s, w0
85
+ ; CHECK-SD-NEXT: mov w8, #1 // =0x1
86
+ ; CHECK-SD-NEXT: dup v1.2d, x8
87
+ ; CHECK-SD-NEXT: ushll v0.2d, v0.2s, #0
88
+ ; CHECK-SD-NEXT: bic v0.16b, v1.16b, v0.16b
89
+ ; CHECK-SD-NEXT: mov x8, v0.d[1]
90
+ ; CHECK-SD-NEXT: cmp x8, #1
91
+ ; CHECK-SD-NEXT: cset w0, ne
92
+ ; CHECK-SD-NEXT: ret
93
+ ;
94
+ ; CHECK-GI-LABEL: PR17487:
95
+ ; CHECK-GI: // %bb.0:
96
+ ; CHECK-GI-NEXT: // kill: def $w0 killed $w0 def $x0
97
+ ; CHECK-GI-NEXT: mov v0.d[1], x0
98
+ ; CHECK-GI-NEXT: adrp x8, .LCPI3_0
99
+ ; CHECK-GI-NEXT: ldr q1, [x8, :lo12:.LCPI3_0]
100
+ ; CHECK-GI-NEXT: bic v0.16b, v1.16b, v0.16b
101
+ ; CHECK-GI-NEXT: mov d0, v0.d[1]
102
+ ; CHECK-GI-NEXT: fmov x8, d0
103
+ ; CHECK-GI-NEXT: cmp x8, #1
104
+ ; CHECK-GI-NEXT: cset w0, ne
105
+ ; CHECK-GI-NEXT: ret
71
106
%tmp = insertelement <2 x i1 > undef , i1 %tobool , i32 1
72
107
%tmp1 = zext <2 x i1 > %tmp to <2 x i64 >
73
108
%tmp2 = xor <2 x i64 > %tmp1 , <i64 1 , i64 1 >
0 commit comments