diff options
| author | Craig Topper <craig.topper@intel.com> | 2019-03-06 07:36:38 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@intel.com> | 2019-03-06 07:36:38 +0000 |
| commit | c0e01d29a467f8e1f75e3a351aef9d08617b45cd (patch) | |
| tree | 13b9a98c9d6da59ea96c13f94aa7dbeb7ed8373e /llvm/lib | |
| parent | 97a1c4c340b8f97eb0065a22fd96ef11896ba333 (diff) | |
| download | bcm5719-llvm-c0e01d29a467f8e1f75e3a351aef9d08617b45cd.tar.gz bcm5719-llvm-c0e01d29a467f8e1f75e3a351aef9d08617b45cd.zip | |
[X86] Enable the add with 128 -> sub with -128 encoding trick with X86ISD::ADD when the carry flag isn't used.
This allows us to use an 8-bit sign extended immediate instead of a 16 or 32 bit immediate.
Also do similar for 0x80000000 with 64-bit adds to avoid having to use a movabsq.
llvm-svn: 355485
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrCompiler.td | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86InstrCompiler.td b/llvm/lib/Target/X86/X86InstrCompiler.td index ea7453d5b4b..e4f324e7380 100644 --- a/llvm/lib/Target/X86/X86InstrCompiler.td +++ b/llvm/lib/Target/X86/X86InstrCompiler.td @@ -1491,6 +1491,13 @@ def : Pat<(add GR64:$src1, 128), def : Pat<(store (add (loadi64 addr:$dst), 128), addr:$dst), (SUB64mi8 addr:$dst, -128)>; +def : Pat<(X86add_flag_nocf GR16:$src1, 128), + (SUB16ri8 GR16:$src1, -128)>; +def : Pat<(X86add_flag_nocf GR32:$src1, 128), + (SUB32ri8 GR32:$src1, -128)>; +def : Pat<(X86add_flag_nocf GR64:$src1, 128), + (SUB64ri8 GR64:$src1, -128)>; + // The same trick applies for 32-bit immediate fields in 64-bit // instructions. def : Pat<(add GR64:$src1, 0x0000000080000000), @@ -1498,6 +1505,9 @@ def : Pat<(add GR64:$src1, 0x0000000080000000), def : Pat<(store (add (loadi64 addr:$dst), 0x0000000080000000), addr:$dst), (SUB64mi32 addr:$dst, 0xffffffff80000000)>; +def : Pat<(X86add_flag_nocf GR64:$src1, 0x0000000080000000), + (SUB64ri32 GR64:$src1, 0xffffffff80000000)>; + // To avoid needing to materialize an immediate in a register, use a 32-bit and // with implicit zero-extension instead of a 64-bit and if the immediate has at // least 32 bits of leading zeros. If in addition the last 32 bits can be |

