| ; RUN: opt %loadPolly -polly-import-jscop \ |
| ; RUN: -polly-codegen -polly-invariant-load-hoisting -S \ |
| ; RUN: 2>&1 < %s | FileCheck %s |
| |
| ; Setting new access functions where the base pointer of the array that is newly |
| ; accessed is only loaded within the scop itself caused incorrect code to be |
| ; generated when invariant load hoisting is disabled. This test case checks |
| ; that in case invariant load hoisting is enabled, we generate correct code. |
| |
| ; CHECK: %polly.access.polly.access.X.load = getelementptr float, float* %polly.access.X.load, i64 %polly.indvar |
| |
| define void @invariant_base_ptr(float* noalias %Array, float** noalias %X, |
| float* noalias %C) { |
| |
| start: |
| br label %loop |
| |
| loop: |
| %indvar = phi i64 [0, %start], [%indvar.next, %latch] |
| %indvar.next = add i64 %indvar, 1 |
| %cmp = icmp slt i64 %indvar, 1024 |
| br i1 %cmp, label %body, label %exit |
| |
| body: |
| %gep= getelementptr float, float* %Array, i64 %indvar |
| store float 42.0, float* %gep |
| br label %body2 |
| |
| body2: |
| %Base = load float*, float** %X |
| %gep2 = getelementptr float, float* %Base, i64 %indvar |
| %val2 = load float, float* %gep2 |
| store float %val2, float* %C |
| br label %latch |
| |
| latch: |
| br label %loop |
| |
| exit: |
| ret void |
| } |