Avoid creating 'load X, 0' instead of just 'load X'
authorChris Lattner <sabre@nondot.org>
Wed, 14 Aug 2002 22:11:52 +0000 (22:11 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 14 Aug 2002 22:11:52 +0000 (22:11 +0000)
This _trivial_ change causes GCSE and LICM to be much more effective at
hoisting loads.  Before it would not be able to eliminate 'load X' if there
was just a dominating 'load X, 0' because the expressions were not identical.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3337 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/ExprTypeConvert.cpp

index 98bc9425f45d118aa39370088e13d4a543308eba..ede89563717e57ce551e1889268de747b30a94ff 100644 (file)
@@ -990,6 +990,9 @@ static void ConvertOperandToType(User *U, Value *OldVal, Value *NewVal,
     }
     assert(LoadedTy->isFirstClassType());
 
+    if (Indices.size() == 1)
+      Indices.clear();    // Do not generate load X, 0
+
     Res = new LoadInst(NewVal, Indices, Name);
     assert(Res->getType()->isFirstClassType() && "Load of structure or array!");
     break;