diff options
author | Silviu Baranga <silviu.baranga@arm.com> | 2016-02-04 16:47:09 +0000 |
---|---|---|
committer | Silviu Baranga <silviu.baranga@arm.com> | 2016-02-04 16:47:09 +0000 |
commit | 33b3bd17dd1cc6a00de7ff267b466909dfba186d (patch) | |
tree | 37754da1f758087b3473e43125b0a5770679a273 /lldb/packages/Python/lldbsuite/test/lang/cpp | |
parent | e4dff62f64082770ac35bf556142b89e8d00d500 (diff) | |
download | bcm5719-llvm-33b3bd17dd1cc6a00de7ff267b466909dfba186d.tar.gz bcm5719-llvm-33b3bd17dd1cc6a00de7ff267b466909dfba186d.zip |
[AArch64] Multiply extended 32-bit ints with `[U|S]MADDL'
During instruction selection, the AArch64 backend can recognise the
following pattern and generate an [U|S]MADDL instruction, i.e. a
multiply of two 32-bit operands with a 64-bit result:
(mul (sext i32), (sext i32))
However, when one of the operands is constant, the sign extension
gets folded into the constant in SelectionDAG::getNode(). This means
that the instruction selection sees this:
(mul (sext i32), i64)
...which doesn't match the pattern. Sign-extension and 64-bit
multiply instructions are generated, which are slower than one 32-bit
multiply.
Add a pattern to match this and generate the correct instruction, for
both signed and unsigned multiplies.
Patch by Chris Diamand!
llvm-svn: 259800
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/lang/cpp')
0 files changed, 0 insertions, 0 deletions