diff options
author | Sanjay Patel <spatel@rotateright.com> | 2017-01-08 15:53:40 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2017-01-08 15:53:40 +0000 |
commit | bf51c8a975621c6c275612bfe6d7b8d833c6b83b (patch) | |
tree | 56eea9b17d69e26cc37a6d5d4c9ba3f7e08f2ce0 /llvm/lib/Support/CommandLine.cpp | |
parent | 9c58950eeb0ac0ffe86b0ebdd43b2042d4fb9de6 (diff) | |
download | llvm-bf51c8a975621c6c275612bfe6d7b8d833c6b83b.zip llvm-bf51c8a975621c6c275612bfe6d7b8d833c6b83b.tar.gz llvm-bf51c8a975621c6c275612bfe6d7b8d833c6b83b.tar.bz2 |
[x86] fix usage of stale operands when lowering select
I noticed this problem as part of the ongoing attempt to canonicalize min/max ops in IR.
The debug output shows nodes like this:
t4: i32 = xor t2, Constant:i32<-1>
t21: i8 = setcc t4, Constant:i32<0>, setlt:ch
t14: i32 = select t21, t4, Constant:i32<-1>
And because the select is holding onto the t4 (xor) node while EmitTest creates a new
x86-specific xor node, the lowering results in:
t4: i32 = xor t2, Constant:i32<-1>
t25: i32,i32 = X86ISD::XOR t2, Constant:i32<-1>
t28: i32,glue = X86ISD::CMOV Constant:i32<-1>, t4, Constant:i8<15>, t25:1
Differential Revision: https://reviews.llvm.org/D28374
llvm-svn: 291392
Diffstat (limited to 'llvm/lib/Support/CommandLine.cpp')
0 files changed, 0 insertions, 0 deletions