@@ -24,6 +24,20 @@ entry:
24
24
ret i32 %0
25
25
}
26
26
27
+ define i32 @test_x86_tbm_bextri_u32_z (i32 %a , i32 %b ) nounwind readonly {
28
+ ; CHECK-LABEL: test_x86_tbm_bextri_u32_z:
29
+ ; CHECK: # BB#0: # %entry
30
+ ; CHECK-NEXT: bextr $2814, %edi, %eax # imm = 0xAFE
31
+ ; CHECK-NEXT: testl %eax, %eax
32
+ ; CHECK-NEXT: cmovel %esi, %eax
33
+ ; CHECK-NEXT: retq
34
+ entry:
35
+ %0 = tail call i32 @llvm.x86.tbm.bextri.u32 (i32 %a , i32 2814 )
36
+ %1 = icmp eq i32 %0 , 0
37
+ %2 = select i1 %1 , i32 %b , i32 %0
38
+ ret i32 %2
39
+ }
40
+
27
41
define i64 @test_x86_tbm_bextri_u64 (i64 %a ) nounwind readnone {
28
42
; CHECK-LABEL: test_x86_tbm_bextri_u64:
29
43
; CHECK: # BB#0: # %entry
@@ -46,3 +60,17 @@ entry:
46
60
%0 = tail call i64 @llvm.x86.tbm.bextri.u64 (i64 %tmp1 , i64 2814 )
47
61
ret i64 %0
48
62
}
63
+
64
+ define i64 @test_x86_tbm_bextri_u64_z (i64 %a , i64 %b ) nounwind readnone {
65
+ ; CHECK-LABEL: test_x86_tbm_bextri_u64_z:
66
+ ; CHECK: # BB#0: # %entry
67
+ ; CHECK-NEXT: bextr $2814, %rdi, %rax # imm = 0xAFE
68
+ ; CHECK-NEXT: testq %rax, %rax
69
+ ; CHECK-NEXT: cmoveq %rsi, %rax
70
+ ; CHECK-NEXT: retq
71
+ entry:
72
+ %0 = tail call i64 @llvm.x86.tbm.bextri.u64 (i64 %a , i64 2814 )
73
+ %1 = icmp eq i64 %0 , 0
74
+ %2 = select i1 %1 , i64 %b , i64 %0
75
+ ret i64 %2
76
+ }
0 commit comments