From 020dd898fc1bd82f771b7b771a5c34038c1eec6b Mon Sep 17 00:00:00 2001 From: Andrew Trick Date: Thu, 2 Jan 2014 19:29:38 +0000 Subject: indvars: insert truncate at loop boundary to avoid redundant IVs. When widening an IV to remove s/zext, we generally try to eliminate the original narrow IV. However, LCSSA phi nodes outside the loop were still using the original IV. Clean this up more aggressively to avoid redundancy in generated code. llvm-svn: 198338 --- llvm/test/Transforms/IndVarSimplify/iv-widen.ll | 39 +++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 llvm/test/Transforms/IndVarSimplify/iv-widen.ll (limited to 'llvm/test/Transforms/IndVarSimplify') diff --git a/llvm/test/Transforms/IndVarSimplify/iv-widen.ll b/llvm/test/Transforms/IndVarSimplify/iv-widen.ll new file mode 100644 index 00000000000..12067ab6fe8 --- /dev/null +++ b/llvm/test/Transforms/IndVarSimplify/iv-widen.ll @@ -0,0 +1,39 @@ +; RUN: opt < %s -indvars -S | FileCheck %s + +target triple = "x86_64-apple-darwin" + +; CHECK-LABEL: @sloop +; CHECK-LABEL: B18: +; Only one phi now. +; CHECK: phi +; CHECK-NOT: phi +; We now get 2 trunc, one for the gep and one for the lcssa phi. +; CHECK: trunc i64 %indvars.iv to i32 +; CHECK: trunc i64 %indvars.iv to i32 +; CHECK-LABEL: B24: +define void @sloop(i32* %a) { +Prologue: + br i1 undef, label %B18, label %B6 + +B18: ; preds = %B24, %Prologue + %.02 = phi i32 [ 0, %Prologue ], [ %tmp33, %B24 ] + %tmp23 = zext i32 %.02 to i64 + %tmp33 = add i32 %.02, 1 + %o = getelementptr i32* %a, i32 %.02 + %v = load i32* %o + %t = icmp eq i32 %v, 0 + br i1 %t, label %exit24, label %B24 + +B24: ; preds = %B18 + %t2 = icmp eq i32 %tmp33, 20 + br i1 %t2, label %B6, label %B18 + +B6: ; preds = %Prologue + ret void + +exit24: ; preds = %B18 + call void @dummy(i32 %.02) + unreachable +} + +declare void @dummy(i32) -- cgit v1.2.3