File tree Expand file tree Collapse file tree 2 files changed +32
-0
lines changed Expand file tree Collapse file tree 2 files changed +32
-0
lines changed Original file line number Diff line number Diff line change @@ -74,6 +74,18 @@ define i64 @pext64_load(i64 %x, i64* %y) {
74
74
ret i64 %tmp
75
75
}
76
76
77
+ define i64 @pext64_knownbits (i64 %x , i64 %y ) {
78
+ ; CHECK-LABEL: pext64_knownbits:
79
+ ; CHECK: # %bb.0:
80
+ ; CHECK-NEXT: movabsq $6148914691236517205, %rax # imm = 0x5555555555555555
81
+ ; CHECK-NEXT: pextq %rax, %rdi, %rax
82
+ ; CHECK-NEXT: movl %eax, %eax
83
+ ; CHECK-NEXT: retq
84
+ %tmp = tail call i64 @llvm.x86.bmi.pext.64 (i64 %x , i64 6148914691236517205 )
85
+ %tmp2 = and i64 %tmp , 4294967295
86
+ ret i64 %tmp2
87
+ }
88
+
77
89
declare i64 @llvm.x86.bmi.pext.64 (i64 , i64 )
78
90
79
91
define i64 @mulx64 (i64 %x , i64 %y , i64* %p ) {
Original file line number Diff line number Diff line change @@ -252,6 +252,26 @@ define i32 @pext32_load(i32 %x, i32* %y) {
252
252
ret i32 %tmp
253
253
}
254
254
255
+ define i32 @pext32_knownbits (i32 %x ) {
256
+ ; X86-LABEL: pext32_knownbits:
257
+ ; X86: # %bb.0:
258
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
259
+ ; X86-NEXT: movl $1431655765, %ecx # imm = 0x55555555
260
+ ; X86-NEXT: pextl %ecx, %eax, %eax
261
+ ; X86-NEXT: movzwl %ax, %eax
262
+ ; X86-NEXT: retl
263
+ ;
264
+ ; X64-LABEL: pext32_knownbits:
265
+ ; X64: # %bb.0:
266
+ ; X64-NEXT: movl $1431655765, %eax # imm = 0x55555555
267
+ ; X64-NEXT: pextl %eax, %edi, %eax
268
+ ; X64-NEXT: movzwl %ax, %eax
269
+ ; X64-NEXT: retq
270
+ %tmp = tail call i32 @llvm.x86.bmi.pext.32 (i32 %x , i32 1431655765 )
271
+ %tmp2 = and i32 %tmp , 65535
272
+ ret i32 %tmp2
273
+ }
274
+
255
275
declare i32 @llvm.x86.bmi.pext.32 (i32 , i32 )
256
276
257
277
define i32 @mulx32 (i32 %x , i32 %y , i32* %p ) {
You can’t perform that action at this time.
0 commit comments