mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 13:11:39 +01:00
088fd84a72
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
71 lines
2.0 KiB
YAML
71 lines
2.0 KiB
YAML
# RUN: llc -mtriple=hexagon -run-pass pipeliner -debug-only=pipeliner %s -o /dev/null 2>&1 | FileCheck %s
|
|
# REQUIRES: asserts
|
|
|
|
# Test that the loop carried dependence check correctly identifies a recurrence
|
|
# when the loop variable decreases and the array index offset is negative.
|
|
|
|
# CHECK: Rec NodeSet
|
|
# CHECK: Rec NodeSet
|
|
# CHECK: SU(3)
|
|
# CHECK: SU(4)
|
|
# CHECK: SU(5)
|
|
|
|
--- |
|
|
|
|
define void @test() {
|
|
b0:
|
|
br label %b3
|
|
|
|
b3:
|
|
%lsr.iv = phi [9 x i32]* [ %0, %b3 ], [ undef, %b0 ]
|
|
%v0 = phi i32 [ %v8, %b3 ], [ 7, %b0 ]
|
|
%v1 = phi i32 [ %v6, %b3 ], [ undef, %b0 ]
|
|
%v2 = phi i32 [ %v1, %b3 ], [ undef, %b0 ]
|
|
%lsr.iv1 = bitcast [9 x i32]* %lsr.iv to i32*
|
|
%cgep = getelementptr i32, i32* %lsr.iv1, i32 -2
|
|
%v6 = load i32, i32* %cgep, align 4
|
|
%v7 = tail call i32 @llvm.hexagon.A2.subsat(i32 %v2, i32 %v6)
|
|
store i32 %v7, i32* %lsr.iv1, align 4
|
|
%v8 = add i32 %v0, -1
|
|
%cgep3 = getelementptr [9 x i32], [9 x i32]* %lsr.iv, i32 0, i32 -1
|
|
%0 = bitcast i32* %cgep3 to [9 x i32]*
|
|
%v9 = icmp sgt i32 %v8, 1
|
|
br i1 %v9, label %b3, label %b4
|
|
|
|
b4:
|
|
unreachable
|
|
}
|
|
|
|
declare i32 @llvm.hexagon.A2.subsat(i32, i32) #0
|
|
declare void @llvm.stackprotector(i8*, i8**) #1
|
|
|
|
...
|
|
---
|
|
name: test
|
|
tracksRegLiveness: true
|
|
|
|
body: |
|
|
bb.0:
|
|
successors: %bb.1
|
|
|
|
%10:intregs = IMPLICIT_DEF
|
|
%11:intregs = IMPLICIT_DEF
|
|
J2_loop0i %bb.1, 6, implicit-def $lc0, implicit-def $sa0, implicit-def $usr
|
|
|
|
bb.1 (address-taken):
|
|
successors: %bb.1, %bb.2
|
|
|
|
%0:intregs = PHI %11, %bb.0, %6, %bb.1
|
|
%2:intregs = PHI %10, %bb.0, %4, %bb.1
|
|
%3:intregs = PHI %10, %bb.0, %2, %bb.1
|
|
%4:intregs = L2_loadri_io %0, -8 :: (load 4 from %ir.cgep)
|
|
%12:intregs = A2_subsat %3, %4, implicit-def dead $usr_ovf
|
|
S2_storeri_io %0, 0, %12 :: (store 4 into %ir.lsr.iv1)
|
|
%6:intregs = A2_addi %0, -4
|
|
ENDLOOP0 %bb.1, implicit-def $pc, implicit-def $lc0, implicit $sa0, implicit $lc0
|
|
J2_jump %bb.2, implicit-def dead $pc
|
|
|
|
bb.2:
|
|
|
|
...
|