llvm-project/polly/test/Isl/CodeGen/single_loop_zero_iterations.ll
Tobias Grosser af4e809ca6 Remove code for scalar and PHI to array translation
This removes old code that has been disabled since several weeks and was hidden
behind the flags -disable-polly-intra-scop-scalar-to-array=false and
-polly-model-phi-nodes=false. Earlier, Polly used to translate scalars and
PHI nodes to single element arrays, as this avoided the need for their special
handling in Polly. With Johannes' patches adding native support for such scalar
references to Polly, this code is not needed any more. After this commit both
-polly-prepare and -polly-independent are now mostly no-ops. Only a couple of
simple transformations still remain, but they are scheduled for removal too.

Thanks again to Johannes Doerfert for his nice work in making all this code
obsolete.

llvm-svn: 240766
2015-06-26 07:31:18 +00:00

69 lines
2.3 KiB
LLVM

; RUN: opt %loadPolly -polly-detect-unprofitable -polly-ast -analyze -S < %s | FileCheck %s -check-prefix=SCALAR
;#define N 20
;
;int main () {
; int i;
; int A[N];
;
; A[0] = 0;
;
; __sync_synchronize();
;
; for (i = 0; i < 0; i++)
; A[i] = 1;
;
; __sync_synchronize();
;
; if (A[0] == 0)
; return 0;
; else
; return 1;
;}
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
define i32 @main() nounwind {
entry:
%A = alloca [20 x i32], align 4 ; <[20 x i32]*> [#uses=3]
%arraydecay = getelementptr inbounds [20 x i32], [20 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1]
%arrayidx = getelementptr inbounds i32, i32* %arraydecay, i64 0 ; <i32*> [#uses=1]
store i32 0, i32* %arrayidx
fence seq_cst
br label %for.cond
for.cond: ; preds = %for.inc, %entry
%indvar = phi i64 [ %indvar.next, %for.inc ], [ 0, %entry ] ; <i64> [#uses=2]
%arrayidx3 = getelementptr [20 x i32], [20 x i32]* %A, i64 0, i64 %indvar ; <i32*> [#uses=1]
br i1 false, label %for.body, label %for.end
for.body: ; preds = %for.cond
store i32 1, i32* %arrayidx3
br label %for.inc
for.inc: ; preds = %for.body
%indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1]
br label %for.cond
for.end: ; preds = %for.cond
fence seq_cst
%arraydecay5 = getelementptr inbounds [20 x i32], [20 x i32]* %A, i32 0, i32 0 ; <i32*> [#uses=1]
%arrayidx6 = getelementptr inbounds i32, i32* %arraydecay5, i64 0 ; <i32*> [#uses=1]
%tmp7 = load i32, i32* %arrayidx6 ; <i32> [#uses=1]
%cmp8 = icmp eq i32 %tmp7, 0 ; <i1> [#uses=1]
br i1 %cmp8, label %if.then, label %if.else
if.then: ; preds = %for.end
br label %return
if.else: ; preds = %for.end
br label %return
return: ; preds = %if.else, %if.then
%retval.0 = phi i32 [ 0, %if.then ], [ 1, %if.else ] ; <i32> [#uses=1]
ret i32 %retval.0
}
; SCALAR: for region: 'for.cond => for.end' in function 'main':
; SCALAR-NOT: Stmt_for_body(0);