This is an archive of the discontinued LLVM Phabricator instance.

AMDGPU: VALU carry-in and v_cndmask condition cannot be EXEC
ClosedPublic

Authored by nhaehnle on Sep 14 2017, 4:11 AM.

Details

Reviewers
arsenm
Summary

The hardware will only forward EXEC_LO; the high 32 bits will be zero.

Additionally, inline constants do not work. At least,

v_addc_u32_e64 v0, vcc, v0, v1, -1

which could conceivably be used to combine (v0 + v1 + 1) into a single
instruction, acts as if all carry-in bits are zero.

The llvm.amdgcn.ps.live test is adjusted; it would be nice to combine

s_mov_b64 s[0:1], exec
v_cndmask_b32_e64 v0, v1, v2, s[0:1]

into

v_mov_b32 v0, v3

but it's not particularly high priority.

Fixes dEQP-GLES31.functional.shaders.helper_invocation.value.*

Event Timeline

nhaehnle created this revision.Sep 14 2017, 4:11 AM
arsenm accepted this revision.Sep 14 2017, 10:48 AM

LGTM. I'm surprised your example doesn't fold already

This revision is now accepted and ready to land.Sep 14 2017, 10:48 AM
nhaehnle closed this revision.Oct 23 2017, 6:51 AM

r314522