]> granicus.if.org Git - llvm/commitdiff
[X86] Add a pattern for (i64 (and (anyext def32:), 0x00000000FFFFFFFF)) to produce...
authorCraig Topper <craig.topper@intel.com>
Sun, 27 Jan 2019 03:37:05 +0000 (03:37 +0000)
committerCraig Topper <craig.topper@intel.com>
Sun, 27 Jan 2019 03:37:05 +0000 (03:37 +0000)
def32 here means the producing instruction zeroed bits 63:32. We already do this for zext, but it looks like we can get an and+anyext sometimes.

Spotted in the diffs from D33587.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@352303 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrCompiler.td
test/CodeGen/X86/zext-logicop-shift-load.ll

index bc069f1e242e0d3a816b02bd0bec6ebdb2dd4007..55e87aabb78524eb4979640a9d706427c1a4a4b2 100644 (file)
@@ -1350,6 +1350,8 @@ def def32 : PatLeaf<(i32 GR32:$src), [{
 // we can use a SUBREG_TO_REG.
 def : Pat<(i64 (zext def32:$src)),
           (SUBREG_TO_REG (i64 0), GR32:$src, sub_32bit)>;
+def : Pat<(i64 (and (anyext def32:$src), 0x00000000FFFFFFFF)),
+          (SUBREG_TO_REG (i64 0), GR32:$src, sub_32bit)>;
 
 //===----------------------------------------------------------------------===//
 // Pattern match OR as ADD
index 319c177b30a6c9bd3abbb8b8f412831717e6d049..40d72243dea59921120b7fef6c08e059e89326b1 100644 (file)
@@ -103,7 +103,6 @@ define i64 @test8(i8* %data) {
 ; CHECK-NEXT:    movzwl %ax, %eax
 ; CHECK-NEXT:    shrl $2, %eax
 ; CHECK-NEXT:    orl $60, %eax
-; CHECK-NEXT:    movl %eax, %eax
 ; CHECK-NEXT:    retq
 entry:
   %bf.load = load i8, i8* %data, align 4