This is an archive of the discontinued LLVM Phabricator instance.

AMDGPU/SI: Promote i1 SETCC operations
ClosedPublic

Authored by tstellarAMD on Jan 15 2016, 10:49 AM.

Details

Summary

While working on uniform branching, I've hit a few cases where we emit
i1 SETCC operations.

Diff Detail

Repository
rL LLVM

Event Timeline

tstellarAMD retitled this revision from to AMDGPU/SI: Promote i1 SETCC operations.
tstellarAMD updated this object.
tstellarAMD added a reviewer: arsenm.
tstellarAMD added a subscriber: llvm-commits.
arsenm edited edge metadata.Jan 15 2016, 10:57 AM

From the testcase, I don't see why promotion would be necessary here

From the testcase, I don't see why promotion would be necessary here

The basic block order is swapped by SelectionDAG, so an i1 xor is inserted before the branch instruction. This is optimized to an i1 setcc instruction by the DAGCombine. This isn't an issue now, because SIISelLowering::LowerBRCOND was folding these into the branch intrinsic, but it will be an issue when we switch to uniform branching.

From the testcase, I don't see why promotion would be necessary here

The basic block order is swapped by SelectionDAG, so an i1 xor is inserted before the branch instruction. This is optimized to an i1 setcc instruction by the DAGCombine. This isn't an issue now, because SIISelLowering::LowerBRCOND was folding these into the branch intrinsic, but it will be an issue when we switch to uniform branching.

Can you swap the block order and insert the xor here for the same effect so the DAG builder doesn't do this?

tstellarAMD edited edge metadata.

Put explicit i1 xor in test case.

arsenm accepted this revision.Jan 19 2016, 12:47 PM
arsenm edited edge metadata.

LGTM

This revision is now accepted and ready to land.Jan 19 2016, 12:47 PM
This revision was automatically updated to reflect the committed changes.