1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00
llvm-mirror/test/Analysis/MemorySSA/loop-rotate-valuemap.ll
Alina Sbirlea f6c8fb0687 [LoopRotate + MemorySSA] Keep an <instruction-cloned instruction> map.
Summary:
The map kept in loop rotate is used for instruction remapping, in order
to simplify the clones of instructions. Thus, if an instruction can be
simplified, its simplified value is placed in the map, even when the
clone is added to the IR. MemorySSA in contrast needs to know about that
clone, so it can add an access for it.
To resolve this: keep a different map for MemorySSA.

Reviewers: george.burgess.iv

Subscribers: jlebar, Prazek, llvm-commits

Tags: #llvm

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

llvm-svn: 365672
2019-07-10 17:36:56 +00:00

27 lines
812 B
LLVM

; RUN: opt -loop-rotate -enable-mssa-loop-dependency %s -S | FileCheck %s
; REQUIRES: asserts
; Check that loop rotate keeps proper mapping between cloned instructions,
; otherwise, MemorySSA will assert.
; CHECK-LABEL: @f
define void @f() {
entry:
br label %for.body16
for.cond.cleanup15: ; preds = %for.body16
ret void
for.body16: ; preds = %for.body16.for.body16_crit_edge, %entry
%call.i = tail call float @expf(float 0.000000e+00) #1
%0 = load float*, float** undef, align 8
br i1 undef, label %for.cond.cleanup15, label %for.body16.for.body16_crit_edge
for.body16.for.body16_crit_edge: ; preds = %for.body16
%.pre = load float, float* undef, align 8
br label %for.body16
}
declare float @expf(float)