Files
clang-p2996/polly/test/Isl/CodeGen/invariant_load_complex_condition.ll
Tobias Grosser 6e6264c142 [tests] Force invariant load hoisting for test cases that need it
This will make it easier to switch the default of Polly's invariant load
hoisting strategy and also makes it very clear that these test cases
indeed require invariant code hoisting to work.

llvm-svn: 278667
2016-08-15 13:27:49 +00:00

71 lines
2.4 KiB
LLVM

; RUN: opt %loadPolly -S -polly-codegen -polly-invariant-load-hoisting=true < %s | FileCheck %s
;
; Extracted from h246 in SPEC 2006.
;
; TODO: We check that we do compile this benchmark in reasonable time.
; To do so we currently bail out due to the complex access range
; (multiple modulos) of the invariant load.
;
; FIXME: We should not bail with a false RTC here.
;
; CHECK-LABEL: polly.preload.begin:
; CHECK-NOT: br i1
; CHECK-NOT: br label
; CHECK: br i1 false, label %polly.start, label %entry.split
;
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
%struct.IP = type { i32****, i32***, %struct.P, %struct.S, %struct.m }
%struct.P = type { i32 }
%struct.S = type { i32 }
%struct.D = type { i32 }
%struct.B = type { i32 }
%struct.E = type { i32 }
%struct.s = type { i32 }
%struct.M = type { i32 }
%struct.C = type { i32 }
%struct.T = type { i32 }
%struct.R = type { i32 }
%struct.m = type { i32 }
%struct.d = type { i32 }
@img = external global %struct.IP*, align 8
; Function Attrs: nounwind uwtable
define void @dct_luma(i32 %block_x, i32 %block_y) #0 {
entry:
br label %entry.split
entry.split: ; preds = %entry
%div = sdiv i32 %block_x, 4
%div1 = sdiv i32 %block_y, 4
%rem = srem i32 %div1, 2
%mul4 = shl nsw i32 %rem, 1
%rem5 = srem i32 %div, 2
%add6 = add nsw i32 %mul4, %rem5
%idxprom = sext i32 %add6 to i64
%0 = load %struct.IP*, %struct.IP** @img, align 8
%cofAC = getelementptr inbounds %struct.IP, %struct.IP* %0, i32 0, i32 0
%1 = load i32****, i32***** %cofAC, align 8
%arrayidx = getelementptr inbounds i32***, i32**** %1, i64 0
%2 = load i32***, i32**** %arrayidx, align 8
%arrayidx8 = getelementptr inbounds i32**, i32*** %2, i64 %idxprom
%3 = load i32**, i32*** %arrayidx8, align 8
%mb_data = getelementptr inbounds %struct.IP, %struct.IP* %0, i64 0, i32 4
%4 = load %struct.m, %struct.m* %mb_data, align 8
br i1 false, label %land.rhs, label %land.end
land.rhs: ; preds = %entry.split
br label %land.end
land.end: ; preds = %land.rhs, %entry.split
%5 = phi i1 [ false, %entry.split ], [ undef, %land.rhs ]
br i1 %5, label %for.cond104.preheader, label %for.cond34.preheader
for.cond34.preheader: ; preds = %land.end
unreachable
for.cond104.preheader: ; preds = %land.end
unreachable
}