[PATCH] D48606: [X86] Use bts/btr/btc for single bit set/clear/complement of a variable bit position
Roman Lebedev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 26 23:48:48 PDT 2018
lebedev.ri added inline comments.
================
Comment at: lib/Target/X86/X86InstrCompiler.td:1811-1813
+ def : Pat<(and RC:$src1, (rotl -2, GR8:$src2)),
+ (BTR RC:$src1,
+ (INSERT_SUBREG (VT (IMPLICIT_DEF)), GR8:$src2, sub_8bit))>;
----------------
It doesn't look like the 16-bit cases matched?
```
# *** IR Dump After X86 DAG->DAG Instruction Selection ***:
# Machine code for function btr_16: IsSSA, TracksLiveness
Function Live Ins: $edi in %0, $esi in %1
bb.0 (%ir-block.0):
liveins: $edi, $esi
%1:gr32 = COPY $esi
%0:gr32 = COPY $edi
%2:gr8 = COPY %1.sub_8bit:gr32
%3:gr16 = MOV16ri -2
$cl = COPY %2:gr8
%4:gr16 = ROL16rCL %3:gr16, implicit-def dead $eflags, implicit $cl
%6:gr32 = IMPLICIT_DEF
%5:gr32 = INSERT_SUBREG %6:gr32, killed %4:gr16, %subreg.sub_16bit
%7:gr32 = AND32rr %0:gr32, killed %5:gr32, implicit-def dead $eflags
%8:gr16 = COPY %7.sub_16bit:gr32
$ax = COPY %8:gr16
RET 0, $ax
```
================
Comment at: test/CodeGen/X86/btc_bts_btr.ll:513-517
+; X64-NEXT: movl $-2, %eax
+; X64-NEXT: movl %esi, %ecx
+; X64-NEXT: roll %cl, %eax
+; X64-NEXT: andl (%rdi), %eax
+; X64-NEXT: retq
----------------
I wonder if something like
```
mov (%rdi), %edi
btr %esi, %edi
```
would be better still than not folding at all?
https://reviews.llvm.org/D48606
More information about the llvm-commits
mailing list