diff --git a/llvm/lib/Transforms/Scalar/Scalarizer.cpp b/llvm/lib/Transforms/Scalar/Scalarizer.cpp --- a/llvm/lib/Transforms/Scalar/Scalarizer.cpp +++ b/llvm/lib/Transforms/Scalar/Scalarizer.cpp @@ -398,7 +398,8 @@ continue; Instruction *Old = cast(V); - CV[I]->takeName(Old); + if (isa(CV[I])) + CV[I]->takeName(Old); Old->replaceAllUsesWith(CV[I]); PotentiallyDeadInstrs.emplace_back(Old); } diff --git a/llvm/test/Transforms/Scalarizer/global-bug-2.ll b/llvm/test/Transforms/Scalarizer/global-bug-2.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Transforms/Scalarizer/global-bug-2.ll @@ -0,0 +1,20 @@ +; RUN: opt < %s -scalarizer -S -o - | FileCheck %s +; RUN: opt < %s -passes='function(scalarizer)' -S | FileCheck %s + +; The scalarizer used to change the name of the global variable +; Check that the we don't do that any longer. +; +; CHECK: @c.a = global i16 0, align 1 + +@c.a = global i16 0, align 1 + +define void @c() { +entry: + br label %for.cond1 + +for.cond1: ; preds = %for.cond1, %entry + %d.sroa.0.0 = phi <4 x i16*> [ , %entry ], [ %d.sroa.0.1.vec.insert, %for.cond1 ] + %d.sroa.0.0.vec.extract = extractelement <4 x i16*> %d.sroa.0.0, i32 0 + %d.sroa.0.1.vec.insert = shufflevector <4 x i16*> , <4 x i16*> %d.sroa.0.0, <4 x i32> + br label %for.cond1 +}