1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-02-01 13:11:39 +01:00
llvm-mirror/test/CodeGen/Hexagon/swp-epilog-phi8.ll
Brendon Cahoon 088fd84a72 [Pipeliner] Fix incorrect loop carried dependence calculation
The isLoopCarriedDep function does not correctly compute loop
carried dependences when the array index offset is negative
or the stride is smallar than the access size.

Patch by Denis Antrushin.

Differential Revision: https://reviews.llvm.org/D60135

llvm-svn: 358233
2019-04-11 21:57:51 +00:00

46 lines
1.6 KiB
LLVM

; RUN: llc -march=hexagon -mno-pairing -mno-compound -hexagon-initial-cfg-cleanup=0 < %s | FileCheck %s
; XFAIL: *
; Test that we generate the correct phi names in the epilog when the pipeliner
; schedules a phi and it's loop definition in different stages, e.g., a phi is
; scheduled in stage 2, but the loop definition in scheduled in stage 0). The
; code in generateExistingPhis was generating the wrong name for the last
; epilog bock.
; CHECK: endloop0
; CHECK: sub([[REG:r([0-9]+)]],r{{[0-9]+}}):sat
; CHECK-NOT: sub([[REG]],r{{[0-9]+}}):sat
define void @f0() {
b0:
br label %b1
b1: ; preds = %b1, %b0
br i1 undef, label %b2, label %b1
b2: ; preds = %b1
br label %b3
b3: ; preds = %b3, %b2
%v0 = phi i32 [ %v8, %b3 ], [ 7, %b2 ]
%v1 = phi i32 [ %v6, %b3 ], [ undef, %b2 ]
%v2 = phi i32 [ %v1, %b3 ], [ undef, %b2 ]
%v3 = getelementptr inbounds [9 x i32], [9 x i32]* undef, i32 0, i32 %v0
%v4 = add nsw i32 %v0, -2
%v5 = getelementptr inbounds [9 x i32], [9 x i32]* undef, i32 0, i32 %v4
%v6 = load i32, i32* %v5, align 4
%v7 = tail call i32 @llvm.hexagon.A2.subsat(i32 %v2, i32 %v6)
store i32 %v7, i32* %v3, align 4
%v8 = add i32 %v0, -1
%v9 = icmp sgt i32 %v8, 1
br i1 %v9, label %b3, label %b4
b4: ; preds = %b3
unreachable
}
; Function Attrs: nounwind readnone
declare i32 @llvm.hexagon.A2.subsat(i32, i32) #0
attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" }