[llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.cpp ARMInstrInfo.h ARMTargetMachine.cpp ARMTargetMachine.h
clattner at apple.com
Wed May 16 10:09:54 PDT 2007
On May 16, 2007, at 1:18 AM, Evan Cheng wrote:
>> But even then I am not sure if that eliminate the need to have a
>> virtual function isPredicatable. Conditional branches probably would
>> require special handling. Also, while it isn't possible now, it's
>> conceivable some instruction predicate field may not be 'always'
>> coming into the if-conversion pass. In that case, it would require a
>> target hook to examine the field anyway.
> cmov is another class of M_PREDICATED ops that need to be dealt with
> differently. We'll need a hook to check if something is already
> predicated with non-always predicate.
Yes, I think this should be the distinction between M_PREDICATED (the
instr already has a predicate field, but may be set to 'always') vs
M_PREDICABLE (the instr may or may not have a predicate field, but
PredicateInstruction can change it into one that does).
Another thing that occurred to me is that predicates have
implications for livevar analysis (specifically, the scavenger).
Consider this code:
R3 = add [lt] ...
R3 = sub [ge] ...
Note that the add is not dead. :)
> Come to think of it, perhaps we should not have selects if the target
> uses if-conversion.
That would be very nice. Alternatively, we could have the isel
"know" about predicated moves and generate them?
The isel does not know anything about moves at this point.
More information about the llvm-commits