Files
clang-p2996/polly/test/Isl/CodeGen/synthesizable_phi_write_after_loop.ll
Michael Kruse fd46308de4 ScopInfo: Never add read accesses for synthesizable values
Before adding a MK_Value READ MemoryAccess, check whether the read is
necessary or synthesizable. Synthesizable values are later generated by
the SCEVExpander and therefore do not need to be transferred
explicitly. This can happen because the check for synthesizability has
presumbly been forgotten in the case where a phi's incoming value has
been defined in a different statement.

Differential Revision: http://reviews.llvm.org/D15687

llvm-svn: 258998
2016-01-27 22:51:56 +00:00

40 lines
1.0 KiB
LLVM

; RUN: opt %loadPolly -polly-codegen -S < %s | FileCheck %s
;
; Check for the correct written value of a scalar phi write whose value is
; defined within the loop, but its effective value is its last definition when
; leaving the loop (in this test it is the value 2 for %i.inc). This can be
; either computed:
; - Using SCEVExpander:
; In this case the Loop passed to the expander must NOT be the loop
; - Overwriting the same alloca in each iteration s.t. the last value will
; retain in %i.inc.s2a
; The first is currently generated by Polly and tested here.
; CHECK: polly.stmt.next:
; CHECK-NEXT: store i32 2, i32* %phi.phiops
; CHECK-NEXT: br label %polly.stmt.join
define i32 @func() {
entry:
br label %start
start:
br i1 true, label %loop, label %join
loop:
%i = phi i32 [ 0, %start ], [ %i.inc, %loop ]
%i.inc = add nsw i32 %i, 1
%cond = icmp slt i32 %i.inc, 2
br i1 %cond, label %loop, label %next
next:
br label %join
join:
%phi = phi i32 [%i.inc, %next], [0, %start]
br label %return
return:
ret i32 %phi
}