Files
clang-p2996/polly/test/ForwardOpTree/noforward_partial.ll
Michael Kruse a6b2de3b59 [ForwardOpTree] Introduce the -polly-optree pass.
This pass 'forwards' operand trees into statements that use them in
order to avoid scalar dependencies.

This minimal implementation handles only the case of speculatable
instructions. We will successively add support for:
- Hoisted loads
- Read-only values
- Synthesizable values
- Loads
- PHIs
- Forwarding only parts of the tree

Differential Revision: https://reviews.llvm.org/D35754

llvm-svn: 308825
2017-07-22 14:02:47 +00:00

49 lines
885 B
LLVM

; RUN: opt %loadPolly -polly-optree -analyze < %s | FileCheck %s -match-full-lines
;
; Not the entire operand tree can be forwarded,
; some scalar dependencies would remain.
;
; for (int j = 0; j < n; j += 1) {
; bodyA:
; double val = f() + 21.0;
;
; bodyB:
; A[0] = val;
; }
;
declare double @f(...) #1
define void @func(i32 %n, double* noalias nonnull %A) {
entry:
br label %for
for:
%j = phi i32 [0, %entry], [%j.inc, %inc]
%j.cmp = icmp slt i32 %j, %n
br i1 %j.cmp, label %bodyA, label %exit
bodyA:
%v = call double (...) @f()
%val = fadd double %v, 21.0
br label %bodyB
bodyB:
store double %val, double* %A
br label %inc
inc:
%j.inc = add nuw nsw i32 %j, 1
br label %for
exit:
br label %return
return:
ret void
}
attributes #1 = { nounwind readnone }
; CHECK: ForwardOpTree executed, but did not modify anything