diff options
author | Thomas Lively <tlively@google.com> | 2018-10-29 18:38:12 +0000 |
---|---|---|
committer | Thomas Lively <tlively@google.com> | 2018-10-29 18:38:12 +0000 |
commit | eb15d00193f75396c69cfa28b314fd5165d4c3fe (patch) | |
tree | a314611a0533bcefc10beaa5e8642e4fe47c6f87 /llvm/lib/Target | |
parent | 3a2f3c2c0a1accb241726b11780c177f3cd13410 (diff) | |
download | bcm5719-llvm-eb15d00193f75396c69cfa28b314fd5165d4c3fe.tar.gz bcm5719-llvm-eb15d00193f75396c69cfa28b314fd5165d4c3fe.zip |
[WebAssembly] Lower away condition truncations for scalar selects
Reviewers: aheejin, dschuff
Subscribers: sbc100, jgravelle-google, sunfish, llvm-commits
Differential Revision: https://reviews.llvm.org/D53676
llvm-svn: 345521
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyInstrFloat.td | 7 | ||||
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyInstrInteger.td | 7 |
2 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrFloat.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrFloat.td index 3c02b0f01ea..c5290f00b43 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrFloat.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrFloat.td @@ -122,3 +122,10 @@ def : Pat<(select (i32 (seteq I32:$cond, 0)), F32:$lhs, F32:$rhs), (SELECT_F32 F32:$rhs, F32:$lhs, I32:$cond)>; def : Pat<(select (i32 (seteq I32:$cond, 0)), F64:$lhs, F64:$rhs), (SELECT_F64 F64:$rhs, F64:$lhs, I32:$cond)>; + +// The legalizer inserts an unnecessary `and 1` to make input conform +// to getBooleanContents, which we can lower away. +def : Pat<(select (i32 (and I32:$cond, 1)), F32:$lhs, F32:$rhs), + (SELECT_F32 F32:$lhs, F32:$rhs, I32:$cond)>; +def : Pat<(select (i32 (and I32:$cond, 1)), F64:$lhs, F64:$rhs), + (SELECT_F64 F64:$lhs, F64:$rhs, I32:$cond)>; diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrInteger.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrInteger.td index bd41f46214a..d5b63d64369 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrInteger.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrInteger.td @@ -122,3 +122,10 @@ def : Pat<(select (i32 (seteq I32:$cond, 0)), I32:$lhs, I32:$rhs), (SELECT_I32 I32:$rhs, I32:$lhs, I32:$cond)>; def : Pat<(select (i32 (seteq I32:$cond, 0)), I64:$lhs, I64:$rhs), (SELECT_I64 I64:$rhs, I64:$lhs, I32:$cond)>; + +// The legalizer inserts an unnecessary `and 1` to make input conform +// to getBooleanContents, which we can lower away. +def : Pat<(select (i32 (and I32:$cond, 1)), I32:$lhs, I32:$rhs), + (SELECT_I32 I32:$lhs, I32:$rhs, I32:$cond)>; +def : Pat<(select (i32 (and I32:$cond, 1)), I64:$lhs, I64:$rhs), + (SELECT_I64 I64:$lhs, I64:$rhs, I32:$cond)>; |