xref: /llvm-project/polly/test/ScopInfo/allow-all-parameters-dereferencable.ll (revision 5aafc6d58f3405662902cee006be11e599801b88)
1; RUN: opt %loadNPMPolly -disable-output -polly-invariant-load-hoisting \
2; RUN: -polly-allow-dereference-of-all-function-parameters \
3; RUN: '-passes=print<polly-function-scops>' < %s 2>&1 | FileCheck %s --check-prefix=SCOP
4
5; RUN: opt %loadNPMPolly -S -polly-invariant-load-hoisting \
6; RUN: -passes=polly-codegen < %s 2>&1 | FileCheck %s --check-prefix=CODE-RTC
7
8
9; RUN: opt %loadNPMPolly -S -polly-invariant-load-hoisting \
10; RUN: -polly-allow-dereference-of-all-function-parameters \
11; RUN: -passes=polly-codegen < %s 2>&1 | FileCheck %s --check-prefix=CODE
12
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: }
24
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
29
30; Check that we don't generate a runtime check because we treat all
31; parameters as dereferenceable.
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
34
35target 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"
36target triple = "x86_64-unknown-linux-gnu"
37
38@global = external global i32
39
40; Function Attrs: nounwind uwtable
41define void @hoge(ptr noalias %arg, ptr noalias %arg1, ptr noalias %arg2, ptr %A) #0 {
42bb:
43  %tmp = load i32, ptr @global, align 4
44  %tmp3 = icmp sgt i32 %tmp, 1
45  br label %bb14
46
47bb14:                                             ; preds = %bb
48  br label %bb15
49
50bb15:                                             ; preds = %bb14
51  br i1 %tmp3, label %bb16, label %bb27
52
53bb16:                                             ; preds = %bb15
54  %tmp17 = load i32, ptr %arg1, align 4
55  br label %bb18
56
57bb18:                                             ; 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], ptr %arg2, i64 0, i64 %tmp21
62  store i64 undef, ptr %tmp22, align 8
63  %tmp24 = icmp eq i32 %tmp19, %tmp17
64  %tmp25 = add i32 %tmp19, 1
65  br i1 %tmp24, label %bb26, label %bb18
66
67bb26:                                             ; preds = %bb18
68  br label %bb27
69
70bb27:                                             ; preds = %bb26, %bb15
71  %tmp28 = load i32, ptr %arg, align 4
72  store float 42.0, ptr %A
73  br label %bb29
74
75bb29:                                             ; preds = %bb35, %bb27
76  %tmp30 = load i32, ptr %arg1, align 4
77  store float 42.0, ptr %A
78  br label %bb31
79
80bb31:                                             ; preds = %bb31, %bb29
81  %tmp32 = phi i32 [ 1, %bb31 ], [ 1, %bb29 ]
82  store float 42.0, ptr %A
83  %tmp33 = icmp eq i32 %tmp32, %tmp30
84  br i1 %tmp33, label %bb34, label %bb31
85
86bb34:                                             ; preds = %bb31
87  br label %bb35
88
89bb35:                                             ; preds = %bb34
90  %tmp36 = icmp eq i32 0, %tmp28
91  br i1 %tmp36, label %bb37, label %bb29
92
93bb37:                                             ; preds = %bb35
94  ret void
95}
96
97attributes #0 = { nounwind uwtable }
98