mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-28 13:51:09 +00:00
58a9482211
With an undef operand, it's possible for getVRegDef to fail and return null. This is an edge case very little code bothered to consider. Proper gMIR should use G_IMPLICIT_DEF instead. I initially tried to apply this restriction to all SSA MIR, so then getVRegDef would never fail anywhere. However, ProcessImplicitDefs does technically run while the function is in SSA. ProcessImplicitDefs and DetectDeadLanes would need to either move, or a new pseudo-SSA type of function property would need to be introduced.
26 lines
839 B
YAML
26 lines
839 B
YAML
# RUN: not --crash llc -march=aarch64 -o /dev/null -run-pass=none -verify-machineinstrs %s 2>&1 | FileCheck %s
|
|
# REQUIRES: aarch64-registered-target
|
|
|
|
# Undef uses are illegal for generic vregs.
|
|
|
|
---
|
|
name: test_undef_use
|
|
liveins:
|
|
body: |
|
|
bb.0:
|
|
%0:_(s32) = G_CONSTANT i32 0
|
|
|
|
; Test generic instruction
|
|
; CHECK: *** Bad machine code: Generic virtual register use cannot be undef ***
|
|
G_STORE %0, undef %1:_(p0) :: (store 4)
|
|
|
|
; Make sure this fails on a post-isel generic instruction.
|
|
; CHECK: *** Bad machine code: Generic virtual register use cannot be undef ***
|
|
$x0 = COPY undef %2:_(s64)
|
|
|
|
; Make sure this fails with a target instruction
|
|
; CHECK: *** Bad machine code: Generic virtual register use cannot be undef ***
|
|
RET_ReallyLR implicit $x0, implicit undef %3:_(s32)
|
|
...
|
|
|