[PATCH] D110603: [GlobalISel][IRTranslator] Emit trap intrinsic for unreachable
Amara Emerson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 5 16:56:08 PDT 2021
aemerson added a comment.
In D110603#3041995 <https://reviews.llvm.org/D110603#3041995>, @uabelho wrote:
> Hi,
>
> I think there is something broken after the relanding of this.
> For my out-of-tree target I have a testcase where there exists a block that is unreachable from entry, but that is referenced in a PHI:
>
> body: |
> bb.0:
> liveins: $a0h, $r0
> %0:all(s16) = COPY $a0h
> %1:all(s16) = COPY $r0
> brr_uncond %bb.2
>
> bb.1:
> brr_uncond %bb.2
>
> bb.2:
> %2:all(s16) = G_PHI %0(s16), %bb.0, %1(s16), %bb.1
> $a0h = COPY %2
>
> So %bb.1 is dead, but jumps to %bb.2 so the G_PHI in %bb.2 references %bb.1
>
> With this patch we get this result:
>
> body: |
> ; Instruction count: 5
> bb.0:
> successors: %bb.2(0x80000000)
> liveins: $a0h, $r0
>
> %0:anh_rn = COPY $a0h
> %1:anh_rn = COPY $r0
> brr_uncond %bb.2
>
> bb.2:
> %2:anh_rn = PHI %0, %bb.0, %1, %bb.-1
> $a0h = COPY %2
>
> So %bb.1 is removed, but the PHI now looks broken because %bb.1 has been replace with %bb.-1 instead of the operand being removed completely.
That's unfortunate. It looks to me that the MIR is invalid. At the IR level simplifycfg should have deleted those blocks and fixed up any phis.
I'll split the fix for this into a separate patch for review.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D110603/new/
https://reviews.llvm.org/D110603
More information about the llvm-commits
mailing list