From: Craig Topper Date: Sat, 5 Oct 2013 17:17:53 +0000 (+0000) Subject: Add an additional pattern for BLCI since opt can turn (not (add x, 1)) into (sub... X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=e2522fd06c0844c7083cc2cbd3ad0aae960e4a00;p=oota-llvm.git Add an additional pattern for BLCI since opt can turn (not (add x, 1)) into (sub -2, x). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192037 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td index be35187a8d5..02ad1695a64 100644 --- a/lib/Target/X86/X86InstrInfo.td +++ b/lib/Target/X86/X86InstrInfo.td @@ -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)), diff --git a/test/CodeGen/X86/tbm_patterns.ll b/test/CodeGen/X86/tbm_patterns.ll index 8b999be0ea7..79eea10af3a 100644 --- a/test/CodeGen/X86/tbm_patterns.ll +++ b/test/CodeGen/X86/tbm_patterns.ll @@ -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: