summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorCameron McInally <cameron.mcinally@nyu.edu>2014-07-15 15:03:32 +0000
committerCameron McInally <cameron.mcinally@nyu.edu>2014-07-15 15:03:32 +0000
commit53bc7a3330513b5b840b860ee4d55a2bae1dc86e (patch)
treedde8da7599eea2f45d5ad6b8840841f713f944e4 /llvm/lib
parentbd5555cc3f1c0d31c96511c6e041a8f1b2f34302 (diff)
downloadbcm5719-llvm-53bc7a3330513b5b840b860ee4d55a2bae1dc86e.tar.gz
bcm5719-llvm-53bc7a3330513b5b840b860ee4d55a2bae1dc86e.zip
Add x86 patterns to match a specific add-with-carry.
llvm-svn: 213070
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86InstrCompiler.td6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86InstrCompiler.td b/llvm/lib/Target/X86/X86InstrCompiler.td
index ca4f608a6b8..bbfa59f55f0 100644
--- a/llvm/lib/Target/X86/X86InstrCompiler.td
+++ b/llvm/lib/Target/X86/X86InstrCompiler.td
@@ -324,10 +324,16 @@ def : Pat<(sub GR64:$op, (and (i64 (X86setcc_c X86_COND_B, EFLAGS)), 1)),
(SBB64ri8 GR64:$op, 0)>;
// (sub OP, SETCC_CARRY) -> (adc OP, 0)
+def : Pat<(sub (add GR8:$op1, GR8:$op2), (i8 (X86setcc_c X86_COND_B, EFLAGS))),
+ (ADC8ri GR8:$op1, GR8:$op2)>;
def : Pat<(sub GR8:$op, (i8 (X86setcc_c X86_COND_B, EFLAGS))),
(ADC8ri GR8:$op, 0)>;
+def : Pat<(sub (add GR32:$op1, GR32:$op2), (i32 (X86setcc_c X86_COND_B, EFLAGS))),
+ (ADC32ri8 GR32:$op1, GR32:$op2)>;
def : Pat<(sub GR32:$op, (i32 (X86setcc_c X86_COND_B, EFLAGS))),
(ADC32ri8 GR32:$op, 0)>;
+def : Pat<(sub (add GR64:$op1, GR64:$op2), (i64 (X86setcc_c X86_COND_B, EFLAGS))),
+ (ADC64ri8 GR64:$op1, GR64:$op2)>;
def : Pat<(sub GR64:$op, (i64 (X86setcc_c X86_COND_B, EFLAGS))),
(ADC64ri8 GR64:$op, 0)>;
OpenPOWER on IntegriCloud