forked from OSchip/llvm-project
78 lines
2.2 KiB
LLVM
78 lines
2.2 KiB
LLVM
|
; RUN: opt %loadPolly -polly-delicm -analyze < %s | FileCheck %s
|
||
|
;
|
||
|
; The domain of bb14 contradicts the SCoP's assumptions. This leads to
|
||
|
; 'anything goes' inside the statement since it is never executed,
|
||
|
; including changing a memory write inside to
|
||
|
; [p_0, arg1] -> { Stmt_bb14[i0] -> MemRef_tmp[o0] : false }
|
||
|
; (i.e.: never write)
|
||
|
;
|
||
|
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
|
||
|
|
||
|
define void @f(i16* %arg, i32 %arg1) {
|
||
|
bb:
|
||
|
%tmp = alloca [24 x i32], align 4
|
||
|
br label %bb2
|
||
|
|
||
|
bb2:
|
||
|
%tmp3 = phi i32 [ 0, %bb ], [ %tmp32, %bb34 ]
|
||
|
br i1 true, label %bb5, label %bb4
|
||
|
|
||
|
bb4:
|
||
|
br label %bb24
|
||
|
|
||
|
bb5:
|
||
|
%tmp6 = sub nsw i32 %arg1, %tmp3
|
||
|
%tmp7 = add i32 %tmp6, -1
|
||
|
%tmp8 = icmp eq i32 %tmp3, 0
|
||
|
%tmp9 = getelementptr inbounds i16, i16* %arg, i32 0
|
||
|
br i1 %tmp8, label %bb13, label %bb10
|
||
|
|
||
|
bb10:
|
||
|
%tmp11 = getelementptr inbounds i16, i16* %tmp9, i32 %tmp7
|
||
|
%tmp12 = load i16, i16* %tmp11, align 2
|
||
|
br label %bb14
|
||
|
|
||
|
bb13:
|
||
|
br label %bb31
|
||
|
|
||
|
bb14:
|
||
|
%tmp15 = phi i32 [ 0, %bb10 ], [ %tmp21, %bb14 ]
|
||
|
%tmp16 = phi i16 [ undef, %bb10 ], [ %tmp19, %bb14 ]
|
||
|
%tmp17 = getelementptr inbounds [24 x i32], [24 x i32]* %tmp, i32 0, i32 %tmp15
|
||
|
%tmp18 = getelementptr inbounds i16, i16* %tmp9, i32 0
|
||
|
%tmp19 = load i16, i16* %tmp18, align 2
|
||
|
store i32 undef, i32* %tmp17, align 4
|
||
|
%tmp20 = call i32 asm "#", "=r,r"(i16 %tmp19) readnone
|
||
|
%tmp21 = add nuw nsw i32 %tmp15, 1
|
||
|
%tmp22 = icmp eq i32 %tmp21, %tmp3
|
||
|
br i1 %tmp22, label %bb23, label %bb14
|
||
|
|
||
|
bb23:
|
||
|
br label %bb31
|
||
|
|
||
|
bb24:
|
||
|
%tmp25 = phi i32 [ %tmp30, %bb24 ], [ 0, %bb4 ]
|
||
|
%tmp26 = mul nsw i32 %tmp25, %arg1
|
||
|
%tmp27 = getelementptr inbounds i16, i16* %arg, i32 %tmp26
|
||
|
%tmp28 = getelementptr inbounds i16, i16* %tmp27, i32 0
|
||
|
%tmp29 = load i16, i16* %tmp28, align 2
|
||
|
%tmp30 = add nuw nsw i32 %tmp25, 1
|
||
|
br i1 false, label %bb31, label %bb24
|
||
|
|
||
|
bb31:
|
||
|
%tmp32 = add nuw nsw i32 %tmp3, 1
|
||
|
br i1 undef, label %bb34, label %bb33
|
||
|
|
||
|
bb33:
|
||
|
unreachable
|
||
|
|
||
|
bb34:
|
||
|
br label %bb2
|
||
|
}
|
||
|
|
||
|
|
||
|
; CHECK: Stmt_bb14
|
||
|
; CHECK: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
|
||
|
; CHECK-NEXT: [p_0, arg1] -> { Stmt_bb14[i0] -> MemRef_tmp16__phi[] };
|
||
|
; CHECK-NEXT: new: [p_0, arg1] -> { Stmt_bb14[i0] -> MemRef_tmp[o0] : false };
|