mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
e6ac7d026e
Summary: In Instruction Selection UpdateChains replaces all matched Nodes' chain references including interior token factors and deletes them. This may allow nodes which depend on these interior nodes but are not part of the set of matched nodes to be left with a dangling dependence. Avoid this by doing the replacement for matched non-TokenFactor nodes. Fixes PR36164. Reviewers: jonpa, RKSimon, bogner Subscribers: llvm-commits, hiraditya Differential Revision: https://reviews.llvm.org/D42754 llvm-svn: 323977
114 lines
5.0 KiB
LLVM
114 lines
5.0 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc %s -o - -mtriple=s390x-linux-gnu -mcpu=z13 -disable-basicaa | FileCheck %s
|
|
|
|
; This test checks that we do not a reference to a deleted node.
|
|
|
|
%0 = type { i32 }
|
|
|
|
@g_11 = external dso_local unnamed_addr global i1, align 4
|
|
@g_69 = external dso_local global i32, align 4
|
|
@g_73 = external dso_local unnamed_addr global i32, align 4
|
|
@g_832 = external dso_local constant %0, align 4
|
|
@g_938 = external dso_local unnamed_addr global i64, align 8
|
|
|
|
; Function Attrs: nounwind
|
|
define void @main() local_unnamed_addr #0 {
|
|
; CHECK-LABEL: main:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: stmg %r12, %r15, 96(%r15)
|
|
; CHECK-NEXT: .cfi_offset %r12, -64
|
|
; CHECK-NEXT: .cfi_offset %r13, -56
|
|
; CHECK-NEXT: .cfi_offset %r14, -48
|
|
; CHECK-NEXT: .cfi_offset %r15, -40
|
|
; CHECK-NEXT: lhi %r0, 1
|
|
; CHECK-NEXT: larl %r1, g_938
|
|
; CHECK-NEXT: lhi %r2, 2
|
|
; CHECK-NEXT: lhi %r3, 3
|
|
; CHECK-NEXT: lhi %r4, 0
|
|
; CHECK-NEXT: lhi %r5, 4
|
|
; CHECK-NEXT: larl %r14, g_11
|
|
; CHECK-NEXT: .LBB0_1: # =>This Inner Loop Header: Depth=1
|
|
; CHECK-NEXT: strl %r0, g_73
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: strl %r0, g_69
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: lghi %r13, 24
|
|
; CHECK-NEXT: strl %r2, g_69
|
|
; CHECK-NEXT: ag %r13, 0(%r1)
|
|
; CHECK-NEXT: lrl %r12, g_832
|
|
; CHECK-NEXT: strl %r3, g_69
|
|
; CHECK-NEXT: lrl %r12, g_832
|
|
; CHECK-NEXT: strl %r4, g_69
|
|
; CHECK-NEXT: lrl %r12, g_832
|
|
; CHECK-NEXT: strl %r0, g_69
|
|
; CHECK-NEXT: lrl %r12, g_832
|
|
; CHECK-NEXT: strl %r2, g_69
|
|
; CHECK-NEXT: lrl %r12, g_832
|
|
; CHECK-NEXT: strl %r3, g_69
|
|
; CHECK-NEXT: stgrl %r13, g_938
|
|
; CHECK-NEXT: lrl %r13, g_832
|
|
; CHECK-NEXT: strl %r5, g_69
|
|
; CHECK-NEXT: mvi 0(%r14), 1
|
|
; CHECK-NEXT: j .LBB0_1
|
|
br label %1
|
|
|
|
; <label>:1: ; preds = %1, %0
|
|
store i32 1, i32* @g_73, align 4
|
|
%2 = load i64, i64* @g_938, align 8
|
|
store i32 0, i32* @g_69, align 4
|
|
%3 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
%4 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
%5 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
%6 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 1, i32* @g_69, align 4
|
|
%7 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
%8 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 3, i32* @g_69, align 4
|
|
%9 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
%10 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 1, i32* @g_69, align 4
|
|
%11 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 2, i32* @g_69, align 4
|
|
%12 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 3, i32* @g_69, align 4
|
|
%13 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 0, i32* @g_69, align 4
|
|
%14 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
%15 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
%16 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
%17 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 1, i32* @g_69, align 4
|
|
%18 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 2, i32* @g_69, align 4
|
|
%19 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 3, i32* @g_69, align 4
|
|
%20 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 0, i32* @g_69, align 4
|
|
%21 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 1, i32* @g_69, align 4
|
|
%22 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 2, i32* @g_69, align 4
|
|
%23 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 3, i32* @g_69, align 4
|
|
%24 = add i64 %2, 24
|
|
store i64 %24, i64* @g_938, align 8
|
|
%25 = load volatile i32, i32* getelementptr inbounds (%0, %0* @g_832, i64 0, i32 0), align 4
|
|
store i32 4, i32* @g_69, align 4
|
|
store i1 true, i1* @g_11, align 4
|
|
br label %1
|
|
}
|