; RUN: opt %loadPolly -polly-codegen -polly-invariant-load-hoisting=true -polly-process-unprofitable -S < %s | FileCheck %s ; ; void fence(void); ; ; void f(int *A, int *B) { ; int i = 0; ; int x = 0; ; ; do { ; x = *B; ; S: A[i] += x; ; } while (i++ < 100); ; ; fence(); ; ; do { ; P: A[i]++; ; } while (i++ < x / 2); ; } ; ; CHECK: polly.stmt.stmt.P: ; CHECK: sext i32 %tmp.merge to i64 ; target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" define void @f(i32* %A, i32* %B) { entry: br label %stmt.S stmt.S: ; preds = %do.cond, %entry %indvars.iv2 = phi i64 [ %indvars.iv.next3, %do.cond ], [ 0, %entry ] %tmp = load i32, i32* %B, align 4 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %indvars.iv2 %tmp4 = load i32, i32* %arrayidx, align 4 %add = add nsw i32 %tmp4, %tmp store i32 %add, i32* %arrayidx, align 4 br label %do.cond do.cond: ; preds = %do.body %indvars.iv.next3 = add nuw nsw i64 %indvars.iv2, 1 %exitcond = icmp ne i64 %indvars.iv.next3, 101 br i1 %exitcond, label %stmt.S, label %do.end do.end: ; preds = %do.cond %tmp5 = trunc i64 101 to i32 call void @fence() #2 %tmp6 = sext i32 %tmp5 to i64 br label %stmt.P stmt.P: ; preds = %do.cond.5, %do.end %indvars.iv = phi i64 [ %indvars.iv.next, %do.cond.5 ], [ %tmp6, %do.end ] %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %indvars.iv %tmp7 = load i32, i32* %arrayidx3, align 4 %inc4 = add nsw i32 %tmp7, 1 store i32 %inc4, i32* %arrayidx3, align 4 br label %do.cond.5 do.cond.5: ; preds = %do.body.1 %div = sdiv i32 %tmp, 2 %tmp8 = sext i32 %div to i64 %cmp7 = icmp slt i64 %indvars.iv, %tmp8 %indvars.iv.next = add i64 %indvars.iv, 1 br i1 %cmp7, label %stmt.P, label %do.end.8 do.end.8: ; preds = %do.cond.5 ret void } declare void @fence()