[PR103028] test ifcvt trap_if seq more strictly after reload

Jeff Law jeffreyalaw@gmail.com
Fri Dec 3 14:56:30 GMT 2021



On 12/3/2021 2:21 AM, Alexandre Oliva via Gcc-patches wrote:
> When -fif-conversion2 is enabled, we attempt to replace conditional
> branches around unconditional traps with conditional traps.  That
> canonicalizes compares, which may change an immediate that barely fits
> into one that doesn't.
>
> The compare for the trap is first checked using the predicates of
> cbranch predicates, and then, compare and conditional trap insns are
> emitted and recognized.
>
> In the failing s390x testcase, i <=u 0xffff_ffff is canonicalized into
> i <u 0x1_0000_0000, and the latter immediate doesn't fit.  The insn
> predicates (both cbranch and cmpdi_ccu) happily accept it, since the
> register allocator has no trouble getting them into registers.  The
> problem is that ifcvt2 runs after reload, so we recognize the compare
> insn successfully, but later on we barf when we find that none of the
> constraints fit.
>
> This patch arranges for the trap_if-issuing bits in ifcvt to validate
> post-reload insns using a stricter test that also checks that operands
> fit the constraints.
>
> Regstrapped on x86_64-linux-gnu.  Also verified that the testcase passes
> on a cross to s390x-linux-gnu.  Ok to install?
>
>
> for  gcc/ChangeLog
>
> 	PR rtl-optimization/103028
> 	* ifcvt.c (find_cond_trap): Validate new insns more strictly
> 	after reload.
>
> for  gcc/testsuite/ChangeLog
>
> 	PR rtl-optimization/103028
> 	* gcc.dg/pr103028.c: New.
OK.  I wouldn't be surprised if there's other cases were we're using 
recog_memoized post-reload when we should be using valid_insn_p.

Jeff


More information about the Gcc-patches mailing list