Skip to content

Commit

Permalink
Add an additional pattern for BLCI since opt can turn (not (add x, 1)…
Browse files Browse the repository at this point in the history
…) into (sub -2, x).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192037 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
topperc committed Oct 5, 2013
1 parent 5e195a4 commit e2522fd
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/Target/X86/X86InstrInfo.td
Original file line number Diff line number Diff line change
Expand Up @@ -2014,6 +2014,12 @@ let Predicates = [HasTBM] in {
def : Pat<(or GR64:$src, (not (add GR64:$src, 1))),
(BLCI_64rr GR64:$src)>;

// Extra patterns because opt can optimize the above patterns to this.
def : Pat<(or GR32:$src, (sub -2, GR32:$src)),
(BLCI_32rr GR32:$src)>;
def : Pat<(or GR64:$src, (sub -2, GR64:$src)),
(BLCI_64rr GR64:$src)>;

def : Pat<(and (not GR32:$src), (add GR32:$src, 1)),
(BLCIC_32rr GR32:$src)>;
def : Pat<(and (not GR64:$src), (add GR64:$src, 1)),
Expand Down
20 changes: 20 additions & 0 deletions test/CodeGen/X86/tbm_patterns.ll
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,26 @@ entry:
ret i64 %2
}

define i32 @test_x86_tbm_blci_u32_b(i32 %a) nounwind readnone {
entry:
; CHECK-LABEL: test_x86_tbm_blci_u32_b:
; CHECK-NOT: mov
; CHECK: blci %
%0 = sub i32 -2, %a
%1 = or i32 %0, %a
ret i32 %1
}

define i64 @test_x86_tbm_blci_u64_b(i64 %a) nounwind readnone {
entry:
; CHECK-LABEL: test_x86_tbm_blci_u64_b:
; CHECK-NOT: mov
; CHECK: blci %
%0 = sub i64 -2, %a
%1 = or i64 %0, %a
ret i64 %1
}

define i32 @test_x86_tbm_blcic_u32(i32 %a) nounwind readnone {
entry:
; CHECK-LABEL: test_x86_tbm_blcic_u32:
Expand Down

0 comments on commit e2522fd

Please sign in to comment.