Files
clang-p2996/llvm/test/CodeGen/PowerPC/fixup-kill-dead-flag-crash.mir
Nemanja Ivanovic 46d5d264fc [PowerPC] Improve kill flag computation and add verification after MI peephole
The MI Peephole pass has grown to include a large number of transformations over the years. Many of the transformations require re-computation of kill flags but don't do a good job of re-computing them. This causes us to have very common failures when the compiler is built with expensive checks. Over time, we added and augmented a function that is supposed to go and fix up kill flags after each transformation but we keep missing cases.
This patch does the following:
- Removes the function to re-compute kill flags
- Adds LiveVariables to compute and maintain kill flags while transforming code
- Adds re-computation of kill flags for the post-RA peepholes for each block that contains a transformed instruction

Reviewed By: stefanp

Differential Revision: https://reviews.llvm.org/D133103
2023-09-22 15:26:39 -04:00

39 lines
939 B
YAML

# RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs -start-before ppc-mi-peepholes \
# RUN: -stop-after ppc-mi-peepholes %s -o - | FileCheck %s
---
name: test
#CHECK : name : test
tracksRegLiveness: true
body: |
bb.0.entry:
liveins: $x3
%0:g8rc = COPY $x3
%1:gprc = COPY %0.sub_32:g8rc
%2:g8rc = LI8 63
bb.1:
%3:gprc = COPY %2.sub_32:g8rc
; CHECK: %4:gprc = LI 0
%4:gprc = XORI killed %3:gprc, 63
STW killed %4:gprc, %4:gprc, 100
BLR8 implicit $lr8, implicit $rm
...
---
name: test2
#CHECK : name : test2
tracksRegLiveness: true
body: |
bb.0.entry:
liveins: $r3
%0:gprc = COPY $r3
%1:gprc_and_gprc_nor0 = LI 0
; CHECK-NOT: COPY %1
%2:gprc = COPY %1:gprc_and_gprc_nor0
; CHECK: %3:gprc = LI 1
%3:gprc = ORI killed %2:gprc, 1
; CHECK: STW killed %3, killed %0, 100
STW killed %3:gprc, %0:gprc, 100
BLR8 implicit $lr8, implicit $rm
...