These flags are now always passed to all tests and need to be disabled if not needed. Disabling these flags, rather than passing them to almost all tests, significantly simplfies our RUN: lines. llvm-svn: 249422
101 lines
3.6 KiB
LLVM
101 lines
3.6 KiB
LLVM
; RUN: opt %loadPolly -basicaa -polly-codegen -S < %s | FileCheck %s
|
|
;
|
|
; Verify that we remove the misc intrinsics from the optimized SCoP.
|
|
;
|
|
; CHECK: for.body:
|
|
; CHECK: call {}* @llvm.invariant.start
|
|
; CHECK: for.body4:
|
|
; CHECK: call void @llvm.assume
|
|
; CHECK: call i1 @llvm.expect.i1
|
|
; CHECK: call void @llvm.donothing
|
|
; CHECK: for.end:
|
|
; CHECK: call void @llvm.invariant.end
|
|
; CHECK-NOT: call void @llvm.{{.*}}
|
|
;
|
|
; int A[1024];
|
|
; void jd() {
|
|
; for (int i = 0; i < 1024; i++) {
|
|
; int tmp[1024];
|
|
; for (int j = i; j < 1024; j++)
|
|
; tmp[i] += A[j];
|
|
; A[i] = tmp[i];
|
|
; }
|
|
; }
|
|
;
|
|
; ModuleID = 'test/Isl/CodeGen/lifetime_intrinsics.ll'
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
|
|
@A = common global [1024 x i32] zeroinitializer, align 16
|
|
|
|
; Function Attrs: nounwind uwtable
|
|
define void @jd() #0 {
|
|
entry:
|
|
%tmp = alloca [1024 x i32], align 16
|
|
%tmp3 = bitcast [1024 x i32]* @A to i8*
|
|
br label %for.cond
|
|
|
|
for.cond: ; preds = %for.inc11, %entry
|
|
%indvars.iv3 = phi i64 [ %indvars.iv.next4, %for.inc11 ], [ 0, %entry ]
|
|
%exitcond5 = icmp ne i64 %indvars.iv3, 1024
|
|
br i1 %exitcond5, label %for.body, label %for.end13
|
|
|
|
for.body: ; preds = %for.cond
|
|
%lis = call {}* @llvm.invariant.start(i64 4096, i8* %tmp3) #1
|
|
br label %for.cond2
|
|
|
|
for.cond2: ; preds = %for.inc, %for.body
|
|
%indvars.iv1 = phi i64 [ %indvars.iv.next2, %for.inc ], [ %indvars.iv3, %for.body ]
|
|
%lftr.wideiv = trunc i64 %indvars.iv1 to i32
|
|
%exitcond = icmp ne i32 %lftr.wideiv, 1024
|
|
br i1 %exitcond, label %for.body4, label %for.end
|
|
|
|
for.body4: ; preds = %for.cond2
|
|
call void @llvm.assume(i1 %exitcond)
|
|
call i1 @llvm.expect.i1(i1 %exitcond, i1 1)
|
|
%arrayidx = getelementptr inbounds [1024 x i32], [1024 x i32]* @A, i64 0, i64 %indvars.iv1
|
|
%tmp6 = load i32, i32* %arrayidx, align 4
|
|
%arrayidx6 = getelementptr inbounds [1024 x i32], [1024 x i32]* %tmp, i64 0, i64 %indvars.iv3
|
|
call void @llvm.donothing()
|
|
%tmp7 = load i32, i32* %arrayidx6, align 4
|
|
%add = add nsw i32 %tmp7, %tmp6
|
|
store i32 %add, i32* %arrayidx6, align 4
|
|
br label %for.inc
|
|
|
|
for.inc: ; preds = %for.body4
|
|
%indvars.iv.next2 = add nuw nsw i64 %indvars.iv1, 1
|
|
br label %for.cond2
|
|
|
|
for.end: ; preds = %for.cond2
|
|
%arrayidx8 = getelementptr inbounds [1024 x i32], [1024 x i32]* %tmp, i64 0, i64 %indvars.iv3
|
|
%tmp8 = load i32, i32* %arrayidx8, align 4
|
|
%arrayidx10 = getelementptr inbounds [1024 x i32], [1024 x i32]* @A, i64 0, i64 %indvars.iv3
|
|
call void @llvm.invariant.end({}* %lis, i64 4096, i8* %tmp3) #1
|
|
store i32 %tmp8, i32* %arrayidx10, align 4
|
|
br label %for.inc11
|
|
|
|
for.inc11: ; preds = %for.end
|
|
%indvars.iv.next4 = add nuw nsw i64 %indvars.iv3, 1
|
|
br label %for.cond
|
|
|
|
for.end13: ; preds = %for.cond
|
|
ret void
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
declare void @llvm.donothing() #1
|
|
|
|
; Function Attrs: nounwind
|
|
declare void @llvm.assume(i1) #1
|
|
|
|
; Function Attrs: nounwind
|
|
declare i1 @llvm.expect.i1(i1, i1) #1
|
|
|
|
; Function Attrs: nounwind
|
|
declare {}* @llvm.invariant.start(i64, i8* nocapture) #1
|
|
|
|
; Function Attrs: nounwind
|
|
declare void @llvm.invariant.end({}*, i64, i8* nocapture) #1
|
|
|
|
attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="true" "no-nans-fp-math"="true" "stack-protector-buffer-size"="8" "unsafe-fp-math"="true" "use-soft-float"="false" }
|
|
attributes #1 = { nounwind }
|