[Polly] Convert some tests to opaque pointers (NFC)

This commit is contained in:
Nikita Popov 2023-03-17 14:30:41 +01:00
parent ca3f7a5c06
commit 5ecba15434
7 changed files with 117 additions and 124 deletions

View File

@ -1,4 +1,4 @@
; RUN: opt -opaque-pointers=0 %loadPolly -polly-codegen -polly-parallel -S < %s | FileCheck %s
; RUN: opt %loadPolly -polly-codegen -polly-parallel -S < %s | FileCheck %s
;
; void foo(float *A, float *B) {
; for (long i = 0; i < 1000; i++)
@ -10,7 +10,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
; CHECK: define internal void @foo_polly_subfn
define void @foo(float* %A, float* %B) {
define void @foo(ptr %A, ptr %B) {
bb:
br label %bb2
@ -28,12 +28,12 @@ bb4: ; preds = %bb8, %bb3
br i1 %exitcond, label %bb5, label %bb10
bb5: ; preds = %bb4
%tmp = getelementptr inbounds float, float* %B, i64 %i.0
%tmp7 = getelementptr inbounds float, float* %A, i64 %i.0
%tmp6 = load float, float* %tmp, align 4
store float %tmp6, float* %tmp7, align 4
; CHECK: %tmp6_p_scalar_ = load float, float* %scevgep, align 4, !alias.scope !0, !noalias !3
; CHECK: store float %tmp6_p_scalar_, float* %scevgep8, align 4, !alias.scope !3, !noalias !0
%tmp = getelementptr inbounds float, ptr %B, i64 %i.0
%tmp7 = getelementptr inbounds float, ptr %A, i64 %i.0
%tmp6 = load float, ptr %tmp, align 4
store float %tmp6, ptr %tmp7, align 4
; CHECK: %tmp6_p_scalar_ = load float, ptr %scevgep, align 4, !alias.scope !0, !noalias !3
; CHECK: store float %tmp6_p_scalar_, ptr %scevgep7, align 4, !alias.scope !3, !noalias !0
br label %bb8
bb8: ; preds = %bb5

View File

@ -1,5 +1,5 @@
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-parallel-force -polly-print-ast -disable-output < %s | FileCheck %s -check-prefix=AST
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -S < %s | FileCheck %s -check-prefix=IR
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-print-ast -disable-output < %s | FileCheck %s -check-prefix=AST
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -S < %s | FileCheck %s -check-prefix=IR
; Make sure we correctly forward the reference to 'A' to the OpenMP subfunction.
;
@ -15,13 +15,12 @@
; AST: Stmt_for_body(c0);
; IR-LABEL: polly.parallel.for:
; IR-NEXT: %polly.subfn.storeaddr.A = getelementptr inbounds { float* }, { float* }* %polly.par.userContext, i32 0, i32 0
; IR-NEXT: store float* %A, float** %polly.subfn.storeaddr.A
; IR-NEXT: %polly.par.userContext1 = bitcast { float* }* %polly.par.userContext to i8*
; IR-NEXT: %polly.subfn.storeaddr.A = getelementptr inbounds { ptr }, ptr %polly.par.userContext, i32 0, i32 0
; IR-NEXT: store ptr %A, ptr %polly.subfn.storeaddr.A
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
define void @loop_references_outer_ids(float* %A) {
define void @loop_references_outer_ids(ptr %A) {
entry:
br label %for.cond
@ -32,8 +31,8 @@ for.cond: ; preds = %for.inc, %entry
for.body: ; preds = %for.cond
%conv = sitofp i64 %i.0 to float
%arrayidx = getelementptr inbounds float, float* %A, i64 %i.0
store float %conv, float* %arrayidx, align 4
%arrayidx = getelementptr inbounds float, ptr %A, i64 %i.0
store float %conv, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body

View File

@ -1,5 +1,5 @@
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-print-ast -disable-output < %s | FileCheck %s -check-prefix=AST
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-codegen -S < %s | FileCheck %s -check-prefix=IR
; RUN: opt %loadPolly -polly-parallel -polly-print-ast -disable-output < %s | FileCheck %s -check-prefix=AST
; RUN: opt %loadPolly -polly-parallel -polly-codegen -S < %s | FileCheck %s -check-prefix=IR
;
; float A[100];
;
@ -23,18 +23,16 @@
; AST: Stmt_for_body6(c0, c1, c2);
; IR: %polly.par.userContext = alloca { i64, i64 }
; IR: %[[R1:[0-9a-z.]+]] = getelementptr inbounds { i64, i64 }, { i64, i64 }* %polly.par.userContext, i32 0, i32 0
; IR-NEXT: store i64 %n, i64* %[[R1]]
; IR-NEXT: %[[R2:[0-9a-z.]+]] = getelementptr inbounds { i64, i64 }, { i64, i64 }* %polly.par.userContext, i32 0, i32 1
; IR-NEXT: store i64 %polly.indvar, i64* %[[R2]]
; IR-NEXT: %polly.par.userContext1 = bitcast { i64, i64 }* %polly.par.userContext to i8*
; IR: %[[R1:[0-9a-z.]+]] = getelementptr inbounds { i64, i64 }, ptr %polly.par.userContext, i32 0, i32 0
; IR-NEXT: store i64 %n, ptr %[[R1]]
; IR-NEXT: %[[R2:[0-9a-z.]+]] = getelementptr inbounds { i64, i64 }, ptr %polly.par.userContext, i32 0, i32 1
; IR-NEXT: store i64 %polly.indvar, ptr %[[R2]]
; IR-LABEL: @loop_references_outer_ids_polly_subfn(i8* %polly.par.userContext)
; IR: %polly.par.userContext1 = bitcast i8* %polly.par.userContext to { i64, i64 }*
; IR-NEXT: %[[R3:[0-9a-z.]+]] = getelementptr inbounds { i64, i64 }, { i64, i64 }* %polly.par.userContext1, i32 0, i32 0
; IR-NEXT: %[[R4:[0-9a-z.]+]] = load i64, i64* %[[R3]]
; IR-NEXT: %[[R5:[0-9a-z.]+]] = getelementptr inbounds { i64, i64 }, { i64, i64 }* %polly.par.userContext1, i32 0, i32 1
; IR-NEXT: %[[R6:[0-9a-z.]+]] = load i64, i64* %[[R5]]
; IR-LABEL: @loop_references_outer_ids_polly_subfn(ptr %polly.par.userContext)
; IR: %[[R3:[0-9a-z.]+]] = getelementptr inbounds { i64, i64 }, ptr %polly.par.userContext, i32 0, i32 0
; IR-NEXT: %[[R4:[0-9a-z.]+]] = load i64, ptr %[[R3]]
; IR-NEXT: %[[R5:[0-9a-z.]+]] = getelementptr inbounds { i64, i64 }, ptr %polly.par.userContext, i32 0, i32 1
; IR-NEXT: %[[R6:[0-9a-z.]+]] = load i64, ptr %[[R5]]
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
@ -70,10 +68,10 @@ for.body6: ; preds = %for.cond4
%add7 = add nsw i64 %i.0, %j.0
%add8 = add nsw i64 %add7, %k.0
%conv = sitofp i64 %add8 to float
%arrayidx = getelementptr inbounds [100 x float], [100 x float]* @A, i64 0, i64 %j.0
%tmp = load float, float* %arrayidx, align 4
%arrayidx = getelementptr inbounds [100 x float], ptr @A, i64 0, i64 %j.0
%tmp = load float, ptr %arrayidx, align 4
%add9 = fadd float %tmp, %conv
store float %add9, float* %arrayidx, align 4
store float %add9, ptr %arrayidx, align 4
br label %for.inc
for.inc: ; preds = %for.body6

View File

@ -1,4 +1,4 @@
; RUN: opt -opaque-pointers=0 %loadPolly -polly-stmt-granularity=bb -polly-parallel -polly-delicm -polly-codegen -S < %s | FileCheck %s
; RUN: opt %loadPolly -polly-stmt-granularity=bb -polly-parallel -polly-delicm -polly-codegen -S < %s | FileCheck %s
;
; Verify that -polly-parallel can handle mapped scalar MemoryAccesses.
;
@ -7,23 +7,21 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
; Function Attrs: nounwind uwtable
define void @main() local_unnamed_addr #0 {
entry:
%0 = load i8*, i8** undef, align 8, !tbaa !1
%1 = load i8*, i8** undef, align 8, !tbaa !1
%arraydecay16 = bitcast i8* %1 to double*
%arraydecay20 = bitcast i8* %0 to [4000 x double]*
%0 = load ptr, ptr undef, align 8, !tbaa !1
%1 = load ptr, ptr undef, align 8, !tbaa !1
br label %for.body65.i226
for.body65.i226: ; preds = %for.inc85.i238, %entry
%indvars.iv8.i223 = phi i64 [ 0, %entry ], [ %indvars.iv.next9.i236, %for.inc85.i238 ]
%arrayidx70.i224 = getelementptr inbounds double, double* %arraydecay16, i64 %indvars.iv8.i223
%arrayidx70.i224 = getelementptr inbounds double, ptr %1, i64 %indvars.iv8.i223
br label %for.body68.i235
for.body68.i235: ; preds = %for.body68.i235, %for.body65.i226
%2 = phi double [ undef, %for.body65.i226 ], [ undef, %for.body68.i235 ]
%indvars.iv.i227 = phi i64 [ 0, %for.body65.i226 ], [ %indvars.iv.next.i233, %for.body68.i235 ]
%arrayidx74.i228 = getelementptr inbounds [4000 x double], [4000 x double]* %arraydecay20, i64 %indvars.iv8.i223, i64 %indvars.iv.i227
%3 = load double, double* %arrayidx74.i228, align 8, !tbaa !5
store double undef, double* %arrayidx70.i224, align 8, !tbaa !5
%arrayidx74.i228 = getelementptr inbounds [4000 x double], ptr %0, i64 %indvars.iv8.i223, i64 %indvars.iv.i227
%3 = load double, ptr %arrayidx74.i228, align 8, !tbaa !5
store double undef, ptr %arrayidx70.i224, align 8, !tbaa !5
%indvars.iv.next.i233 = add nuw nsw i64 %indvars.iv.i227, 1
%exitcond.i234 = icmp eq i64 %indvars.iv.next.i233, 4000
br i1 %exitcond.i234, label %for.inc85.i238, label %for.body68.i235
@ -50,9 +48,8 @@ attributes #0 = { nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="fals
!6 = !{!"double", !3, i64 0}
; CHECK-LABEL: define internal void @main_polly_subfn(i8* %polly.par.userContext)
; CHECK-LABEL: define internal void @main_polly_subfn(ptr %polly.par.userContext)
;
; CHECK: polly.stmt.for.body65.i226:
; CHECK-NEXT: %polly.access.cast.polly.subfunc.arg.[[R0:[0-9]*]] = bitcast i8* %polly.subfunc.arg.{{[0-9]*}} to double*
; CHECK-NEXT: %polly.access.polly.subfunc.arg.[[R1:[0-9]*]] = getelementptr double, double* %polly.access.cast.polly.subfunc.arg.[[R0]], i64 %polly.indvar
; CHECK-NEXT: store double undef, double* %polly.access.polly.subfunc.arg.[[R1]]
; CHECK-NEXT: %polly.access.polly.subfunc.arg.[[R1:[0-9]*]] = getelementptr double, ptr %polly.subfunc.arg.[[R0:[0-9]*]], i64 %polly.indvar
; CHECK-NEXT: store double undef, ptr %polly.access.polly.subfunc.arg.[[R1]]

View File

@ -1,7 +1,7 @@
; RUN: opt -opaque-pointers=0 %loadPolly -polly-print-import-jscop \
; RUN: opt %loadPolly -polly-print-import-jscop \
; RUN: -disable-output < %s | FileCheck %s
; RUN: opt -opaque-pointers=0 %loadPolly -polly-import-jscop \
; RUN: opt %loadPolly -polly-import-jscop \
; RUN: -polly-codegen -S < %s \
; RUN: -polly-parallel \
; RUN: | FileCheck %s -check-prefix=IR
@ -20,19 +20,19 @@
; CHECK: new: [n, m] -> { Stmt_bb4[i0, i1] -> MemRef_A[i0, 43 + i1] };
; IR: %polly.access.mul.polly.subfunc.arg.A = mul nsw i64 %polly.indvar, %polly.subfunc.arg.m
; IR: %6 = add nsw i64 %polly.indvar5, 13
; IR: %6 = add nsw i64 %polly.indvar4, 13
; IR: %polly.access.add.polly.subfunc.arg.A = add nsw i64 %polly.access.mul.polly.subfunc.arg.A, %6
; IR: %polly.access.polly.subfunc.arg.A = getelementptr float, float* %polly.subfunc.arg.A, i64 %polly.access.add.polly.subfunc.arg.A
; IR: %tmp10_p_scalar_ = load float, float* %polly.access.polly.subfunc.arg.A, align 4, !alias.scope !0, !noalias !3, !llvm.access.group !4
; IR: %polly.access.polly.subfunc.arg.A = getelementptr float, ptr %polly.subfunc.arg.A, i64 %polly.access.add.polly.subfunc.arg.A
; IR: %tmp10_p_scalar_ = load float, ptr %polly.access.polly.subfunc.arg.A, align 4, !alias.scope !0, !noalias !3, !llvm.access.group !4
; IR: %polly.access.mul.polly.subfunc.arg.A8 = mul nsw i64 %polly.indvar, %polly.subfunc.arg.m
; IR: %7 = add nsw i64 %polly.indvar5, 43
; IR: %polly.access.add.polly.subfunc.arg.A9 = add nsw i64 %polly.access.mul.polly.subfunc.arg.A8, %7
; IR: %polly.access.polly.subfunc.arg.A10 = getelementptr float, float* %polly.subfunc.arg.A, i64 %polly.access.add.polly.subfunc.arg.A9
; IR: store float %p_tmp11, float* %polly.access.polly.subfunc.arg.A10, align 4, !alias.scope !0, !noalias !3, !llvm.access.group !4
; IR: %polly.access.mul.polly.subfunc.arg.A7 = mul nsw i64 %polly.indvar, %polly.subfunc.arg.m
; IR: %7 = add nsw i64 %polly.indvar4, 43
; IR: %polly.access.add.polly.subfunc.arg.A8 = add nsw i64 %polly.access.mul.polly.subfunc.arg.A7, %7
; IR: %polly.access.polly.subfunc.arg.A9 = getelementptr float, ptr %polly.subfunc.arg.A, i64 %polly.access.add.polly.subfunc.arg.A8
; IR: store float %p_tmp11, ptr %polly.access.polly.subfunc.arg.A9, align 4, !alias.scope !0, !noalias !3, !llvm.access.group !4
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
define void @new_multidim_access(i64 %n, i64 %m, float* %A) {
define void @new_multidim_access(i64 %n, i64 %m, ptr %A) {
bb:
br label %bb1
@ -55,10 +55,10 @@ bb4: ; preds = %bb3
%tmp7 = shl nsw i64 %j.0, 1
%tmp8 = mul nsw i64 %i.0, %m
%.sum = add i64 %tmp8, %tmp7
%tmp9 = getelementptr inbounds float, float* %A, i64 %.sum
%tmp10 = load float, float* %tmp9, align 4
%tmp9 = getelementptr inbounds float, ptr %A, i64 %.sum
%tmp10 = load float, ptr %tmp9, align 4
%tmp11 = fadd float %tmp10, %tmp6
store float %tmp11, float* %tmp9, align 4
store float %tmp11, ptr %tmp9, align 4
br label %bb12
bb12: ; preds = %bb4

View File

@ -1,15 +1,15 @@
; RUN: opt -opaque-pointers=0 %loadPolly -polly-stmt-granularity=bb -polly-codegen -polly-parallel \
; RUN: opt %loadPolly -polly-stmt-granularity=bb -polly-codegen -polly-parallel \
; RUN: -polly-parallel-force -S < %s | FileCheck %s
;
; Test to verify that we pass %rem96 to the parallel subfunction.
;
; CHECK: %[[R:[0-9]*]] = getelementptr inbounds { i32, i32, i64, float*, float*, i32 }, { i32, i32, i64, float*, float*, i32 }* %polly.par.userContext1, i32 0, i32 5
; CHECK-NEXT: %polly.subfunc.arg.rem96 = load i32, i32* %[[R]]
; CHECK: %[[R:[0-9]*]] = getelementptr inbounds { i32, i32, i64, ptr, ptr, i32 }, ptr %polly.par.userContext, i32 0, i32 5
; CHECK-NEXT: %polly.subfunc.arg.rem96 = load i32, ptr %[[R]]
;
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
; Function Attrs: nounwind uwtable
define void @dmxpy(i32 %n1, float* %y, i32 %n2, float* %x) #0 {
define void @dmxpy(i32 %n1, ptr %y, i32 %n2, ptr %x) #0 {
entry:
%rem96 = srem i32 %n2, 16
%0 = sext i32 %rem96 to i64
@ -23,11 +23,11 @@ for.cond195.preheader: ; preds = %for.inc363, %entry
for.body197: ; preds = %for.body197, %for.cond195.preheader
%indvars.iv = phi i64 [ %indvars.iv.next, %for.body197 ], [ 0, %for.cond195.preheader ]
%arrayidx199 = getelementptr inbounds float, float* %y, i64 %indvars.iv
%arrayidx199 = getelementptr inbounds float, ptr %y, i64 %indvars.iv
%2 = add nsw i64 %indvars.iv262, -6
%arrayidx292 = getelementptr inbounds float, float* %x, i64 %2
%3 = load float, float* %arrayidx292, align 4
store float undef, float* %arrayidx199, align 4
%arrayidx292 = getelementptr inbounds float, ptr %x, i64 %2
%3 = load float, ptr %arrayidx292, align 4
store float undef, ptr %arrayidx199, align 4
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
%lftr.wideiv = trunc i64 %indvars.iv.next to i32
%exitcond = icmp ne i32 %lftr.wideiv, %n1

View File

@ -1,14 +1,14 @@
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-parallel-force -polly-print-ast -disable-output < %s | FileCheck %s -check-prefix=AST
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -S -verify-dom-info < %s | FileCheck %s -check-prefix=IR
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-print-ast -disable-output < %s | FileCheck %s -check-prefix=AST
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -S -verify-dom-info < %s | FileCheck %s -check-prefix=IR
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-parallel-force -polly-import-jscop -polly-print-ast -disable-output < %s | FileCheck %s -check-prefix=AST-STRIDE4
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-parallel-force -polly-import-jscop -polly-codegen -S < %s | FileCheck %s -check-prefix=IR-STRIDE4
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-import-jscop -polly-print-ast -disable-output < %s | FileCheck %s -check-prefix=AST-STRIDE4
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-import-jscop -polly-codegen -S < %s | FileCheck %s -check-prefix=IR-STRIDE4
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM -polly-scheduling=static -polly-scheduling-chunksize=43 -S -verify-dom-info < %s | FileCheck %s -check-prefix=LIBOMP-IR-STATIC-CHUNKED
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM -polly-scheduling=static -S -verify-dom-info < %s | FileCheck %s -check-prefix=LIBOMP-IR-STATIC
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM -polly-scheduling=dynamic -S -verify-dom-info < %s | FileCheck %s -check-prefix=LIBOMP-IR-DYNAMIC
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM -polly-scheduling=dynamic -polly-scheduling-chunksize=4 -S -verify-dom-info < %s | FileCheck %s -check-prefix=LIBOMP-IR-DYNAMIC-FOUR
; RUN: opt -opaque-pointers=0 %loadPolly -polly-parallel -polly-parallel-force -polly-import-jscop -polly-codegen -polly-omp-backend=LLVM -S < %s | FileCheck %s -check-prefix=LIBOMP-IR-STRIDE4
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM -polly-scheduling=static -polly-scheduling-chunksize=43 -S -verify-dom-info < %s | FileCheck %s -check-prefix=LIBOMP-IR-STATIC-CHUNKED
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM -polly-scheduling=static -S -verify-dom-info < %s | FileCheck %s -check-prefix=LIBOMP-IR-STATIC
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM -polly-scheduling=dynamic -S -verify-dom-info < %s | FileCheck %s -check-prefix=LIBOMP-IR-DYNAMIC
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM -polly-scheduling=dynamic -polly-scheduling-chunksize=4 -S -verify-dom-info < %s | FileCheck %s -check-prefix=LIBOMP-IR-DYNAMIC-FOUR
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-import-jscop -polly-codegen -polly-omp-backend=LLVM -S < %s | FileCheck %s -check-prefix=LIBOMP-IR-STRIDE4
; This extensive test case tests the creation of the full set of OpenMP calls
; as well as the subfunction creation using a trivial loop as example.
@ -37,17 +37,15 @@
; IR-NEXT: %polly.par.userContext = alloca
; IR-LABEL: polly.parallel.for:
; IR-NEXT: %polly.par.userContext1 = bitcast {}* %polly.par.userContext to i8*
; IR-NEXT: call void @GOMP_parallel_loop_runtime_start(void (i8*)* @single_parallel_loop_polly_subfn, i8* %polly.par.userContext1, i32 0, i64 0, i64 1024, i64 1)
; IR-NEXT: call void @single_parallel_loop_polly_subfn(i8* %polly.par.userContext1)
; IR-NEXT: call void @GOMP_parallel_loop_runtime_start(ptr @single_parallel_loop_polly_subfn, ptr %polly.par.userContext, i32 0, i64 0, i64 1024, i64 1)
; IR-NEXT: call void @single_parallel_loop_polly_subfn(ptr %polly.par.userContext)
; IR-NEXT: call void @GOMP_parallel_end()
; IR-NEXT: br label %polly.exiting
; IR: define internal void @single_parallel_loop_polly_subfn(i8* %polly.par.userContext) #1
; IR: define internal void @single_parallel_loop_polly_subfn(ptr %polly.par.userContext) #1
; IR-LABEL: polly.par.setup:
; IR-NEXT: %polly.par.LBPtr = alloca i64
; IR-NEXT: %polly.par.UBPtr = alloca i64
; IR-NEXT: %polly.par.userContext1 =
; IR: br label %polly.par.checkNext
; IR-LABEL: polly.par.exit:
@ -55,13 +53,13 @@
; IR-NEXT: ret void
; IR-LABEL: polly.par.checkNext:
; IR-NEXT: %[[parnext:[._a-zA-Z0-9]*]] = call i8 @GOMP_loop_runtime_next(i64* %polly.par.LBPtr, i64* %polly.par.UBPtr)
; IR-NEXT: %[[parnext:[._a-zA-Z0-9]*]] = call i8 @GOMP_loop_runtime_next(ptr %polly.par.LBPtr, ptr %polly.par.UBPtr)
; IR-NEXT: %[[cmp:[._a-zA-Z0-9]*]] = icmp ne i8 %[[parnext]], 0
; IR-NEXT: br i1 %[[cmp]], label %polly.par.loadIVBounds, label %polly.par.exit
; IR-LABEL: polly.par.loadIVBounds:
; IR-NEXT: %polly.par.LB = load i64, i64* %polly.par.LBPtr
; IR-NEXT: %polly.par.UB = load i64, i64* %polly.par.UBPtr
; IR-NEXT: %polly.par.LB = load i64, ptr %polly.par.LBPtr
; IR-NEXT: %polly.par.UB = load i64, ptr %polly.par.UBPtr
; IR-NEXT: %polly.par.UBAdjusted = sub i64 %polly.par.UB, 1
; IR-NEXT: br label %polly.loop_preheader
@ -73,8 +71,9 @@
; IR-NEXT: br label %polly.stmt.S
; IR-LABEL: polly.stmt.S:
; IR-NEXT: %[[gep:[._a-zA-Z0-9]*]] = getelementptr [1024 x float], [1024 x float]* {{.*}}, i64 0, i64 %polly.indvar
; IR-NEXT: store float 1.000000e+00, float* %[[gep]]
; IR-NEXT: %[[offset:[0-9]+]] = shl i64 %polly.indvar, 2
; IR-NEXT: %[[gep:[._a-zA-Z0-9]*]] = getelementptr i8, ptr {{.*}}, i64 %[[offset]]
; IR-NEXT: store float 1.000000e+00, ptr %[[gep]]
; IR-NEXT: %polly.indvar_next = add nsw i64 %polly.indvar, 1
; IR-NEXT: %polly.loop_cond = icmp sle i64 %polly.indvar_next, %polly.par.UBAdjusted
; IR-NEXT: br i1 %polly.loop_cond, label %polly.loop_header, label %polly.loop_exit
@ -84,48 +83,46 @@
; IR: attributes #1 = { "polly.skip.fn" }
; IR-STRIDE4: call void @GOMP_parallel_loop_runtime_start(void (i8*)* @single_parallel_loop_polly_subfn, i8* %polly.par.userContext1, i32 0, i64 0, i64 1024, i64 4)
; IR-STRIDE4: call void @GOMP_parallel_loop_runtime_start(ptr @single_parallel_loop_polly_subfn, ptr %polly.par.userContext, i32 0, i64 0, i64 1024, i64 4)
; IR-STRIDE4: add nsw i64 %polly.indvar, 3
; IR-STRIDE4: %polly.indvar_next = add nsw i64 %polly.indvar, 4
; IR-STRIDE4 %polly.adjust_ub = sub i64 %polly.par.UBAdjusted, 4
; LIBOMP-IR-STATIC-CHUNKED: %struct.ident_t = type { i32, i32, i32, i32, i8* }
; LIBOMP-IR-STATIC-CHUNKED: %struct.ident_t = type { i32, i32, i32, i32, ptr }
; LIBOMP-IR-STATIC-CHUNKED-LABEL: single_parallel_loop()
; LIBOMP-IR-STATIC-CHUNKED-NEXT: entry
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.par.userContext = alloca
; LIBOMP-IR-STATIC-CHUNKED-LABEL: polly.parallel.for:
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.par.userContext1 = bitcast {}* %polly.par.userContext to i8*
; LIBOMP-IR-STATIC-CHUNKED-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @.loc.dummy, i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i8*)* @single_parallel_loop_polly_subfn to void (i32*, i32*, ...)*), i64 0, i64 1024, i64 1, i8* %polly.par.userContext1)
; LIBOMP-IR-STATIC-CHUNKED-NEXT: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @.loc.dummy, i32 4, ptr @single_parallel_loop_polly_subfn, i64 0, i64 1024, i64 1, ptr %polly.par.userContext)
; LIBOMP-IR-STATIC-CHUNKED-NEXT: br label %polly.exiting
; LIBOMP-IR-STATIC-CHUNKED: define internal void @single_parallel_loop_polly_subfn(i32* %polly.kmpc.global_tid, i32* %polly.kmpc.bound_tid, i64 %polly.kmpc.lb, i64 %polly.kmpc.ub, i64 %polly.kmpc.inc, i8* %polly.kmpc.shared)
; LIBOMP-IR-STATIC-CHUNKED: define internal void @single_parallel_loop_polly_subfn(ptr %polly.kmpc.global_tid, ptr %polly.kmpc.bound_tid, i64 %polly.kmpc.lb, i64 %polly.kmpc.ub, i64 %polly.kmpc.inc, ptr %polly.kmpc.shared)
; LIBOMP-IR-STATIC-CHUNKED-LABEL: polly.par.setup:
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.par.LBPtr = alloca i64
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.par.UBPtr = alloca i64
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.par.lastIterPtr = alloca i32
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.par.StridePtr = alloca i64
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.par.userContext = bitcast i8* %polly.kmpc.shared
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.par.global_tid = load i32, i32* %polly.kmpc.global_tid
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.kmpc.lb, i64* %polly.par.LBPtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.kmpc.ub, i64* %polly.par.UBPtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i32 0, i32* %polly.par.lastIterPtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.kmpc.inc, i64* %polly.par.StridePtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.par.global_tid = load i32, ptr %polly.kmpc.global_tid
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.kmpc.lb, ptr %polly.par.LBPtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.kmpc.ub, ptr %polly.par.UBPtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i32 0, ptr %polly.par.lastIterPtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.kmpc.inc, ptr %polly.par.StridePtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.UBAdjusted = add i64 %polly.kmpc.ub, -1
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.indvar.UBAdjusted, i64* %polly.par.UBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: call void @__kmpc_for_static_init_{{[4|8]}}(%struct.ident_t* @.loc.dummy{{[.0-9]*}}, i32 %polly.par.global_tid, i32 33, i32* %polly.par.lastIterPtr, i64* %polly.par.LBPtr, i64* %polly.par.UBPtr, i64* %polly.par.StridePtr, i64 1, i64 43)
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.kmpc.stride = load i64, i64* %polly.par.StridePtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.LB = load i64, i64* %polly.par.LBPtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.UB.temp = load i64, i64* %polly.par.UBPtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.indvar.UBAdjusted, ptr %polly.par.UBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: call void @__kmpc_for_static_init_{{[4|8]}}(ptr @.loc.dummy{{[.0-9]*}}, i32 %polly.par.global_tid, i32 33, ptr %polly.par.lastIterPtr, ptr %polly.par.LBPtr, ptr %polly.par.UBPtr, ptr %polly.par.StridePtr, i64 1, i64 43)
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.kmpc.stride = load i64, ptr %polly.par.StridePtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.LB = load i64, ptr %polly.par.LBPtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.UB.temp = load i64, ptr %polly.par.UBPtr
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.UB.inRange = icmp sle i64 %polly.indvar.UB.temp, %polly.indvar.UBAdjusted
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.UB = select i1 %polly.indvar.UB.inRange, i64 %polly.indvar.UB.temp, i64 %polly.indvar.UBAdjusted
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.indvar.UB, i64* %polly.par.UBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.indvar.UB, ptr %polly.par.UBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.hasIteration = icmp sle i64 %polly.indvar.LB, %polly.indvar.UB
; LIBOMP-IR-STATIC-CHUNKED: br i1 %polly.hasIteration, label %polly.par.loadIVBounds, label %polly.par.exit
; LIBOMP-IR-STATIC-CHUNKED-LABEL: polly.par.exit:
; LIBOMP-IR-STATIC-CHUNKED-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @.loc.dummy, i32 %polly.par.global_tid)
; LIBOMP-IR-STATIC-CHUNKED-NEXT: call void @__kmpc_for_static_fini(ptr @.loc.dummy, i32 %polly.par.global_tid)
; LIBOMP-IR-STATIC-CHUNKED-NEXT: ret void
; LIBOMP-IR-STATIC-CHUNKED-LABEL: polly.par.checkNext:
@ -133,14 +130,14 @@
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %{{[0-9]+}} = add i64 %polly.indvar.UB.entry, %polly.kmpc.stride
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.nextUB.outOfBounds = icmp sgt i64 %{{[0-9]+}}, %polly.indvar.UBAdjusted
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.nextUB = select i1 %polly.indvar.nextUB.outOfBounds, i64 %polly.indvar.UBAdjusted, i64 %{{[0-9]+}}
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.indvar.nextLB, i64* %polly.par.LBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.indvar.nextUB, i64* %polly.par.UBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.indvar.nextLB, ptr %polly.par.LBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store i64 %polly.indvar.nextUB, ptr %polly.par.UBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.hasWork = icmp sle i64 %polly.indvar.nextLB, %polly.indvar.UBAdjusted
; LIBOMP-IR-STATIC-CHUNKED-NEXT: br i1 %polly.hasWork, label %polly.par.loadIVBounds, label %polly.par.exit
; LIBOMP-IR-STATIC-CHUNKED-LABEL: polly.par.loadIVBounds:
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.LB.entry = load i64, i64* %polly.par.LBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.UB.entry = load i64, i64* %polly.par.UBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.LB.entry = load i64, ptr %polly.par.LBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar.UB.entry = load i64, ptr %polly.par.UBPtr, align 8
; LIBOMP-IR-STATIC-CHUNKED-NEXT: br label %polly.loop_preheader
; LIBOMP-IR-STATIC-CHUNKED-LABEL: polly.loop_exit:
@ -151,8 +148,9 @@
; LIBOMP-IR-STATIC-CHUNKED-NEXT: br label %polly.stmt.S
; LIBOMP-IR-STATIC-CHUNKED-LABEL: polly.stmt.S:
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %[[gep:[._a-zA-Z0-9]*]] = getelementptr [1024 x float], [1024 x float]* {{.*}}, i64 0, i64 %polly.indvar
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store float 1.000000e+00, float* %[[gep]]
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %[[offset:[0-9]+]] = shl i64 %polly.indvar, 2
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %[[gep:[._a-zA-Z0-9]*]] = getelementptr i8, ptr {{.*}}, i64 %[[offset]]
; LIBOMP-IR-STATIC-CHUNKED-NEXT: store float 1.000000e+00, ptr %[[gep]]
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.indvar_next = add nsw i64 %polly.indvar, 1
; LIBOMP-IR-STATIC-CHUNKED-NEXT: %polly.loop_cond = icmp sle i64 %polly.indvar_next, %polly.indvar.UB.entry
; LIBOMP-IR-STATIC-CHUNKED-NEXT: br i1 %polly.loop_cond, label %polly.loop_header, label %polly.loop_exit
@ -162,13 +160,13 @@
; LIBOMP-IR-STATIC-CHUNKED: attributes #1 = { "polly.skip.fn" }
; LIBOMP-IR-STATIC: define internal void @single_parallel_loop_polly_subfn(i32* %polly.kmpc.global_tid, i32* %polly.kmpc.bound_tid, i64 %polly.kmpc.lb, i64 %polly.kmpc.ub, i64 %polly.kmpc.inc, i8* %polly.kmpc.shared)
; LIBOMP-IR-STATIC: define internal void @single_parallel_loop_polly_subfn(ptr %polly.kmpc.global_tid, ptr %polly.kmpc.bound_tid, i64 %polly.kmpc.lb, i64 %polly.kmpc.ub, i64 %polly.kmpc.inc, ptr %polly.kmpc.shared)
; LIBOMP-IR-STATIC-LABEL: polly.par.setup:
; LIBOMP-IR-STATIC: call void @__kmpc_for_static_init_{{[4|8]}}(%struct.ident_t* @.loc.dummy{{[.0-9]*}}, i32 %polly.par.global_tid, i32 34, i32* %polly.par.lastIterPtr, i64* %polly.par.LBPtr, i64* %polly.par.UBPtr, i64* %polly.par.StridePtr, i64 1, i64 1)
; LIBOMP-IR-STATIC: call void @__kmpc_for_static_init_{{[4|8]}}(ptr @.loc.dummy{{[.0-9]*}}, i32 %polly.par.global_tid, i32 34, ptr %polly.par.lastIterPtr, ptr %polly.par.LBPtr, ptr %polly.par.UBPtr, ptr %polly.par.StridePtr, i64 1, i64 1)
; LIBOMP-IR-STATIC: br i1 %polly.hasIteration, label %polly.par.loadIVBounds, label %polly.par.exit
; LIBOMP-IR-STATIC-LABEL: polly.par.exit:
; LIBOMP-IR-STATIC-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @.loc.dummy, i32 %polly.par.global_tid)
; LIBOMP-IR-STATIC-NEXT: call void @__kmpc_for_static_fini(ptr @.loc.dummy, i32 %polly.par.global_tid)
; LIBOMP-IR-STATIC-NEXT: ret void
; LIBOMP-IR-STATIC-LABEL: polly.par.checkNext:
@ -185,8 +183,9 @@
; LIBOMP-IR-STATIC-NEXT: br label %polly.stmt.S
; LIBOMP-IR-STATIC-LABEL: polly.stmt.S:
; LIBOMP-IR-STATIC-NEXT: %[[gep:[._a-zA-Z0-9]*]] = getelementptr [1024 x float], [1024 x float]* {{.*}}, i64 0, i64 %polly.indvar
; LIBOMP-IR-STATIC-NEXT: store float 1.000000e+00, float* %[[gep]]
; LIBOMP-IR-STATIC-NEXT: %[[offset:[0-9]+]] = shl i64 %polly.indvar, 2
; LIBOMP-IR-STATIC-NEXT: %[[gep:[._a-zA-Z0-9]*]] = getelementptr i8, ptr {{.*}}, i64 %[[offset]]
; LIBOMP-IR-STATIC-NEXT: store float 1.000000e+00, ptr %[[gep]]
; LIBOMP-IR-STATIC-NEXT: %polly.indvar_next = add nsw i64 %polly.indvar, 1
; LIBOMP-IR-STATIC-NEXT: %polly.loop_cond = icmp sle i64 %polly.indvar_next, %polly.indvar.UB
; LIBOMP-IR-STATIC-NEXT: br i1 %polly.loop_cond, label %polly.loop_header, label %polly.loop_exit
@ -194,8 +193,8 @@
; LIBOMP-IR-STATIC-LABEL: polly.loop_preheader:
; LIBOMP-IR-STATIC-NEXT: br label %polly.loop_header
; LIBOMP-IR-DYNAMIC: call void @__kmpc_dispatch_init_{{[4|8]}}(%struct.ident_t* @.loc.dummy, i32 %polly.par.global_tid, i32 35, i64 %polly.kmpc.lb, i64 %polly.indvar.UBAdjusted, i64 %polly.kmpc.inc, i64 1)
; LIBOMP-IR-DYNAMIC-NEXT: %{{[0-9]+}} = call i32 @__kmpc_dispatch_next_{{[4|8]}}(%struct.ident_t* @.loc.dummy, i32 %polly.par.global_tid, i32* %polly.par.lastIterPtr, i64* %polly.par.LBPtr, i64* %polly.par.UBPtr, i64* %polly.par.StridePtr)
; LIBOMP-IR-DYNAMIC: call void @__kmpc_dispatch_init_{{[4|8]}}(ptr @.loc.dummy, i32 %polly.par.global_tid, i32 35, i64 %polly.kmpc.lb, i64 %polly.indvar.UBAdjusted, i64 %polly.kmpc.inc, i64 1)
; LIBOMP-IR-DYNAMIC-NEXT: %{{[0-9]+}} = call i32 @__kmpc_dispatch_next_{{[4|8]}}(ptr @.loc.dummy, i32 %polly.par.global_tid, ptr %polly.par.lastIterPtr, ptr %polly.par.LBPtr, ptr %polly.par.UBPtr, ptr %polly.par.StridePtr)
; LIBOMP-IR-DYNAMIC-NEXT: %polly.hasIteration = icmp eq i32 %{{[0-9]+}}, 1
; LIBOMP-IR-DYNAMIC-NEXT: br i1 %polly.hasIteration, label %polly.par.loadIVBounds, label %polly.par.exit
@ -203,18 +202,18 @@
; LIBOMP-IR-DYNAMIC-NEXT: ret void
; LIBOMP-IR-DYNAMIC-LABEL: polly.par.checkNext:
; LIBOMP-IR-DYNAMIC-NEXT: %{{[0-9]+}} = call i32 @__kmpc_dispatch_next_{{[4|8]}}(%struct.ident_t* @.loc.dummy, i32 %polly.par.global_tid, i32* %polly.par.lastIterPtr, i64* %polly.par.LBPtr, i64* %polly.par.UBPtr, i64* %polly.par.StridePtr)
; LIBOMP-IR-DYNAMIC-NEXT: %{{[0-9]+}} = call i32 @__kmpc_dispatch_next_{{[4|8]}}(ptr @.loc.dummy, i32 %polly.par.global_tid, ptr %polly.par.lastIterPtr, ptr %polly.par.LBPtr, ptr %polly.par.UBPtr, ptr %polly.par.StridePtr)
; LIBOMP-IR-DYNAMIC-NEXT: %polly.hasWork = icmp eq i32 %{{[0-9]+}}, 1
; LIBOMP-IR-DYNAMIC-NEXT: br i1 %polly.hasWork, label %polly.par.loadIVBounds, label %polly.par.exit
; LIBOMP-IR-DYNAMIC-LABEL: polly.par.loadIVBounds:
; LIBOMP-IR-DYNAMIC-NEXT: %polly.indvar.LB = load i64, i64* %polly.par.LBPtr
; LIBOMP-IR-DYNAMIC-NEXT: %polly.indvar.UB = load i64, i64* %polly.par.UBPtr
; LIBOMP-IR-DYNAMIC-NEXT: %polly.indvar.LB = load i64, ptr %polly.par.LBPtr
; LIBOMP-IR-DYNAMIC-NEXT: %polly.indvar.UB = load i64, ptr %polly.par.UBPtr
; LIBOMP-IR-DYNAMIC-NEXT: br label %polly.loop_preheader
; LIBOMP-IR-DYNAMIC-FOUR: call void @__kmpc_dispatch_init_{{[4|8]}}(%struct.ident_t* @.loc.dummy, i32 %polly.par.global_tid, i32 35, i64 %polly.kmpc.lb, i64 %polly.indvar.UBAdjusted, i64 %polly.kmpc.inc, i64 4)
; LIBOMP-IR-DYNAMIC-FOUR: call void @__kmpc_dispatch_init_{{[4|8]}}(ptr @.loc.dummy, i32 %polly.par.global_tid, i32 35, i64 %polly.kmpc.lb, i64 %polly.indvar.UBAdjusted, i64 %polly.kmpc.inc, i64 4)
; LIBOMP-IR-STRIDE4: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @.loc.dummy, i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i8*)* @single_parallel_loop_polly_subfn to void (i32*, i32*, ...)*), i64 0, i64 1024, i64 4, i8* %polly.par.userContext1)
; LIBOMP-IR-STRIDE4: call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @.loc.dummy, i32 4, ptr @single_parallel_loop_polly_subfn, i64 0, i64 1024, i64 4, ptr %polly.par.userContext)
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"
@ -226,12 +225,12 @@ entry:
for.i:
%indvar = phi i64 [ %indvar.next, %for.inc], [ 0, %entry ]
%scevgep = getelementptr [1024 x float], [1024 x float]* @A, i64 0, i64 %indvar
%scevgep = getelementptr [1024 x float], ptr @A, i64 0, i64 %indvar
%exitcond = icmp ne i64 %indvar, 1024
br i1 %exitcond, label %S, label %exit
S:
store float 1.0, float* %scevgep
store float 1.0, ptr %scevgep
br label %for.inc
for.inc: