A few more SH{L|R}D peepholes.
authorEvan Cheng <evan.cheng@apple.com>
Fri, 20 Jan 2006 01:13:30 +0000 (01:13 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Fri, 20 Jan 2006 01:13:30 +0000 (01:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25473 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86InstrInfo.td
lib/Target/X86/X86TargetMachine.cpp

index 92b0c964557cc473435886cb8e62d6dfe83d0b2e..b60292e71cd47225da902209e80882f79ee76dcb 100644 (file)
@@ -3073,17 +3073,33 @@ def : Pat<(or (srl R32:$src1, CL:$amt),
               (shl R32:$src2, (sub 32, CL:$amt))),
           (SHRD32rrCL R32:$src1, R32:$src2)>;
 
+def : Pat<(store (or (srl (loadi32 addr:$dst), CL:$amt),
+                     (shl R32:$src2, (sub 32, CL:$amt))), addr:$dst),
+          (SHRD32mrCL addr:$dst, R32:$src2)>;
+
 // (or (x << c) | (y >> (32 - c))) ==> (shld32 x, y, c)
 def : Pat<(or (shl R32:$src1, CL:$amt),
               (srl R32:$src2, (sub 32, CL:$amt))),
           (SHLD32rrCL R32:$src1, R32:$src2)>;
 
+def : Pat<(store (or (shl (loadi32 addr:$dst), CL:$amt),
+                     (srl R32:$src2, (sub 32, CL:$amt))), addr:$dst),
+          (SHLD32mrCL addr:$dst, R32:$src2)>;
+
 // (or (x >> c) | (y << (16 - c))) ==> (shrd16 x, y, c)
 def : Pat<(or (srl R16:$src1, CL:$amt),
               (shl R16:$src2, (sub 16, CL:$amt))),
           (SHRD16rrCL R16:$src1, R16:$src2)>;
 
+def : Pat<(store (or (srl (loadi16 addr:$dst), CL:$amt),
+                     (shl R16:$src2, (sub 16, CL:$amt))), addr:$dst),
+          (SHRD16mrCL addr:$dst, R16:$src2)>;
+
 // (or (x << c) | (y >> (16 - c))) ==> (shld16 x, y, c)
 def : Pat<(or (shl R16:$src1, CL:$amt),
               (srl R16:$src2, (sub 16, CL:$amt))),
           (SHLD16rrCL R16:$src1, R16:$src2)>;
+
+def : Pat<(store (or (shl (loadi16 addr:$dst), CL:$amt),
+                     (srl R16:$src2, (sub 16, CL:$amt))), addr:$dst),
+          (SHLD16mrCL addr:$dst, R16:$src2)>;
index 4af0b06c0066898a88fe258a34bafd8281635c6b..a484b9dac937c45bf25a09ba8ed791578918ee0a 100644 (file)
@@ -48,7 +48,7 @@ namespace {
   cl::opt<bool, true> EnableX86DAGDAG("enable-x86-dag-isel", cl::Hidden,
                       cl::desc("Enable DAG-to-DAG isel for X86"),
                       cl::location(X86DAGIsel),
-                      cl::init(false));
+                      cl::init(true));
   
   // FIXME: This should eventually be handled with target triples and
   // subtarget support!