Fix Polly
[polly-mirror.git] / test / ScopInfo / allow-all-parameters-dereferencable.ll
blob0939f4ba2786071849a3a7de33cf2268b5d840d8
1 ; RUN: opt %loadPolly -analyze -polly-invariant-load-hoisting \
2 ; RUN: -polly-allow-dereference-of-all-function-parameters \
3 ; RUN: -polly-scops < %s | FileCheck %s --check-prefix=SCOP
5 ; RUN: opt %loadPolly -S -polly-invariant-load-hoisting \
6 ; RUN: -polly-codegen < %s | FileCheck %s --check-prefix=CODE-RTC
9 ; RUN: opt %loadPolly -S -polly-invariant-load-hoisting \
10 ; RUN: -polly-allow-dereference-of-all-function-parameters \
11 ; RUN: -polly-codegen < %s | FileCheck %s --check-prefix=CODE
13 ; SCOP:      Function: hoge
14 ; SCOP-NEXT: Region: %bb15---%bb37
15 ; SCOP-NEXT: Max Loop Depth:  2
16 ; SCOP-NEXT: Invariant Accesses: {
17 ; SCOP-NEXT:         ReadAccess :=      [Reduction Type: NONE] [Scalar: 0]
18 ; SCOP-NEXT:             [tmp, tmp17, tmp28] -> { Stmt_bb29[i0] -> MemRef_arg1[0] };
19 ; SCOP-NEXT:         Execution Context: [tmp, tmp17, tmp28] -> {  :  }
20 ; SCOP-NEXT:         ReadAccess :=      [Reduction Type: NONE] [Scalar: 0]
21 ; SCOP-NEXT:             [tmp, tmp17, tmp28] -> { Stmt_bb27[] -> MemRef_arg[0] };
22 ; SCOP-NEXT:         Execution Context: [tmp, tmp17, tmp28] -> {  :  }
23 ; SCOP-NEXT: }
25 ; Check that without the option `-polly-allow-dereference-of-all-function-parameters`
26 ; we do generate the runtime check.
27 ; CODE-RTC: polly.preload.cond:                               ; preds = %polly.preload.begin
28 ; CODE-RTC-NEXT: br i1 %{{[a-zA-Z0-9]*}}, label %polly.preload.exec, label %polly.preload.merge
30 ; Check that we don't generate a runtime check because we treat all
31 ; parameters as dereferencable.
32 ; CODE-NOT: polly.preload.cond:                               ; preds = %polly.preload.begin
33 ; CODE-NOT: br i1 %{{r1:[a-zA-Z0-9]*}}, label %polly.preload.exec, label %polly.preload.merge
35 target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
36 target triple = "x86_64-unknown-linux-gnu"
38 @global = external global i32
40 ; Function Attrs: nounwind uwtable
41 define void @hoge(i32* noalias %arg, i32* noalias %arg1, [0 x double]* noalias %arg2, float* %A) #0 {
42 bb:
43   %tmp = load i32, i32* @global, align 4
44   %tmp3 = icmp sgt i32 %tmp, 1
45   br label %bb14
47 bb14:                                             ; preds = %bb
48   br label %bb15
50 bb15:                                             ; preds = %bb14
51   br i1 %tmp3, label %bb16, label %bb27
53 bb16:                                             ; preds = %bb15
54   %tmp17 = load i32, i32* %arg1, align 4
55   br label %bb18
57 bb18:                                             ; preds = %bb18, %bb16
58   %tmp19 = phi i32 [ %tmp25, %bb18 ], [ 1, %bb16 ]
59   %tmp20 = sext i32 %tmp19 to i64
60   %tmp21 = add nsw i64 %tmp20, -1
61   %tmp22 = getelementptr [0 x double], [0 x double]* %arg2, i64 0, i64 %tmp21
62   %tmp23 = bitcast double* %tmp22 to i64*
63   store i64 undef, i64* %tmp23, align 8
64   %tmp24 = icmp eq i32 %tmp19, %tmp17
65   %tmp25 = add i32 %tmp19, 1
66   br i1 %tmp24, label %bb26, label %bb18
68 bb26:                                             ; preds = %bb18
69   br label %bb27
71 bb27:                                             ; preds = %bb26, %bb15
72   %tmp28 = load i32, i32* %arg, align 4
73   store float 42.0, float* %A
74   br label %bb29
76 bb29:                                             ; preds = %bb35, %bb27
77   %tmp30 = load i32, i32* %arg1, align 4
78   store float 42.0, float* %A
79   br label %bb31
81 bb31:                                             ; preds = %bb31, %bb29
82   %tmp32 = phi i32 [ 1, %bb31 ], [ 1, %bb29 ]
83   store float 42.0, float* %A
84   %tmp33 = icmp eq i32 %tmp32, %tmp30
85   br i1 %tmp33, label %bb34, label %bb31
87 bb34:                                             ; preds = %bb31
88   br label %bb35
90 bb35:                                             ; preds = %bb34
91   %tmp36 = icmp eq i32 0, %tmp28
92   br i1 %tmp36, label %bb37, label %bb29
94 bb37:                                             ; preds = %bb35
95   ret void
98 attributes #0 = { nounwind uwtable }