[PATCH] D44410: [GlobalISel] Extend booleans based on the target's BooleanContent

Eli Friedman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 13 14:38:08 PDT 2018


efriedma added a comment.

This doesn't seem right.

getBooleanContents specifically describes the results and operands for a certain set of DAG operations which require values that are either true or false, but are not represented using i1 after legalization.  So we're talking about the result of ISD::SETCC, the condition operand of ISD::SELECT, etc.  In SelectionDAG, this set of operations are legalized using PromoteTargetBoolean.  (I'm assuming GlobalISel follows similar rules, although I can't find any documentation.)

This general rule does not apply to arbitrary i1 values.  When an i1 is stored to memory, it is always zero-extended.  And for other operations (logic operations, PHI nodes, etc), the high bits are undefined.

Given that, messing with MachineIRBuilder::buildConstant does nothing useful: you're just hiding a bug that could be exposed by producing a boolean some other way.  For example, "trunc i8 %z to i1" gets legalized to a no-op with both SelectionDAG isel and GlobalISel.


Repository:
  rL LLVM

https://reviews.llvm.org/D44410





More information about the llvm-commits mailing list