diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2006-01-20 01:13:30 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2006-01-20 01:13:30 +0000 |
| commit | cce748d316a81ade9597e8c93da606154c4ab45a (patch) | |
| tree | 9016b7c43896435a221a4146b2a4553a227c9c04 /llvm | |
| parent | 9a4ab9660f0bb52ca97e8edf841ed3b63acd99cf (diff) | |
| download | bcm5719-llvm-cce748d316a81ade9597e8c93da606154c4ab45a.tar.gz bcm5719-llvm-cce748d316a81ade9597e8c93da606154c4ab45a.zip | |
A few more SH{L|R}D peepholes.
llvm-svn: 25473
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrInfo.td | 16 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86TargetMachine.cpp | 2 |
2 files changed, 17 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86InstrInfo.td b/llvm/lib/Target/X86/X86InstrInfo.td index 92b0c964557..b60292e71cd 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.td +++ b/llvm/lib/Target/X86/X86InstrInfo.td @@ -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)>; diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp index 4af0b06c006..a484b9dac93 100644 --- a/llvm/lib/Target/X86/X86TargetMachine.cpp +++ b/llvm/lib/Target/X86/X86TargetMachine.cpp @@ -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! |

