[PATCH] D52898: [Porting MergeSimilarFunctions 2/n] Changes to DataLayout

2020-03-20 Thread Vishal Chebrolu via Phabricator via cfe-commits
vish99 updated this revision to Diff 251696.
vish99 added a comment.

Changes to merge the 5 patches together


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D52898/new/

https://reviews.llvm.org/D52898

Files:
  llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
  llvm/lib/Bitcode/Reader/BitcodeReader.cpp
  llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
  llvm/lib/Transforms/IPO/MergeSimilarFunctions.cpp
  llvm/lib/Transforms/Utils/CloneFunction.cpp

Index: llvm/lib/Transforms/Utils/CloneFunction.cpp
===
--- llvm/lib/Transforms/Utils/CloneFunction.cpp
+++ llvm/lib/Transforms/Utils/CloneFunction.cpp
@@ -162,7 +162,7 @@
 
 // Create a new basic block and copy instructions into it!
 BasicBlock *CBB = CloneBasicBlock(, VMap, NameSuffix, NewFunc, CodeInfo,
-  ModuleLevelChanges ?  : nullptr);
+  CT == CloneType::ModuleLevelChanges ?  : nullptr);
 
 // Add basic block mapping.
 VMap[] = CBB;
Index: llvm/lib/Transforms/IPO/MergeSimilarFunctions.cpp
===
--- llvm/lib/Transforms/IPO/MergeSimilarFunctions.cpp
+++ llvm/lib/Transforms/IPO/MergeSimilarFunctions.cpp
@@ -273,7 +273,7 @@
 /// IntPtrType (get it from DataLayout). This is guaranteed to generate no-op
 /// casts, otherwise it will assert.
 static Value *createCastIfNeeded(Value *V, Type *DstType,
- Value *InstrOrBB, Type *IntPtrType) {
+ Value *InstrOrBB, Type *IntPtrType, const DataLayout *DL) {
   if (V->getType() == DstType)
 return V;
 
@@ -297,7 +297,7 @@
 = Builder.CreateExtractValue(V, ArrayRef(I));
   Value *Element = createCastIfNeeded(ExtractedValue,
   DstType->getStructElementType(I),
-  InstrOrBB, IntPtrType);
+  InstrOrBB, IntPtrType, DL);
   Result =
   Builder.CreateInsertValue(Result, Element, ArrayRef(I));
 }
@@ -325,7 +325,7 @@
 llvm_unreachable("Can only cast int -> ptr or ptr -> (ptr or int)");
   }
 
-  assert(cast(Result)->isNoopCast(IntPtrType) &&
+  assert(cast(Result)->isNoopCast(*DL) &&
   "Cast is not a no-op cast. Potential loss of precision");
 
   return Result;
@@ -1395,7 +1395,7 @@
   FunctionType *FFTy = F->getFunctionType();
   Type *IntPtrTy = DL->getIntPtrType(FFTy->getContext());
   for (auto  : Thunk->args()) {
-Value *Cast = createCastIfNeeded(, FFTy->getParamType(i), BB, IntPtrTy);
+Value *Cast = createCastIfNeeded(, FFTy->getParamType(i), BB, IntPtrTy, DL);
 Args.push_back(Cast);
 ++i;
   }
@@ -1416,7 +1416,7 @@
 else if (CI->getType()->isPointerTy() && RetTy->isIntegerTy())
   Builder.CreateRet(Builder.CreatePtrToInt(CI, RetTy));
 else {
-  Value *Cast = createCastIfNeeded(CI, RetTy, BB, IntPtrTy);
+  Value *Cast = createCastIfNeeded(CI, RetTy, BB, IntPtrTy, DL);
   Builder.CreateRet(Cast);
 }
   }
@@ -1550,7 +1550,7 @@
 Instruction *F1InstInNewF, const std::vector ,
 Function *NewF, ValueToValueMapTy ,
 const SmallVectorImpl ,
-Type *IntPtrTy) {
+Type *IntPtrTy, const DataLayout *DL) {
   assert(F2Insts.size() == Comps.size() &&
   "Mis-match between F2Insts & Comps!");
 
@@ -1598,7 +1598,7 @@
 Value *Cast = createCastIfNeeded(F2NewFOperand,
 F2OrigOperand->getType(),
 F2InstInNewF,
-IntPtrTy);
+IntPtrTy, DL);
 F2InstInNewF->setOperand(OpId, Cast);
   }
 }
@@ -1621,7 +1621,7 @@
 F2Ret->setOperand(0,
   createCastIfNeeded(F2Ret->getReturnValue(),
  F1Ret->getReturnValue()->getType(),
- F2Ret, IntPtrTy));
+ F2Ret, IntPtrTy, DL));
 }
   } else if (!F1InstInNewF->use_empty()) {
 // If the instructions have uses, we need to insert a PHI node.
@@ -1649,7 +1649,7 @@
 createCastIfNeeded(F2InstInNewF,
   F1IType,
   Terminators[FnI+1],
-  IntPtrTy));
+  IntPtrTy, DL));
   }
 
   Phi->addIncoming(F2InstInNewF, F2InstInNewF->getParent());
@@ -1742,7 +1742,7 @@
   const DataLayout *FTD = Fns[FnI]->getDataLayout();
   Type *IntPtrTy = FTD ? FTD->getIntPtrType(Ctx) : NULL;
   F2InValNewF = createCastIfNeeded(F2InValNewF, F1InValNewF->getType(),
-   InsertPt, IntPtrTy);
+   InsertPt, IntPtrTy, FTD);
 
   // Create compare & select
   Value *ChoiceArg = getLastArg(NewF);
@@ -1970,7 +1970,7 @@
   continue; // we already handled these above
 
 insertCondAndRemapInstructions(F1InstInNewF, F2Insts,

[PATCH] D52898: [Porting MergeSimilarFunctions 2/n] Changes to DataLayout

2020-03-20 Thread Vishal Chebrolu via Phabricator via cfe-commits
vish99 updated this revision to Diff 251630.
vish99 added a comment.

Reverting back to diff 222348, the previous diff was against a wrong branch


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D52898/new/

https://reviews.llvm.org/D52898

Files:
  llvm/lib/Transforms/IPO/MergeSimilarFunctions.cpp
  llvm/lib/Transforms/Utils/CloneFunction.cpp

Index: llvm/lib/Transforms/Utils/CloneFunction.cpp
===
--- llvm/lib/Transforms/Utils/CloneFunction.cpp
+++ llvm/lib/Transforms/Utils/CloneFunction.cpp
@@ -162,7 +162,7 @@
 
 // Create a new basic block and copy instructions into it!
 BasicBlock *CBB = CloneBasicBlock(, VMap, NameSuffix, NewFunc, CodeInfo,
-  ModuleLevelChanges ?  : nullptr);
+  CT == CloneType::ModuleLevelChanges ?  : nullptr);
 
 // Add basic block mapping.
 VMap[] = CBB;
Index: llvm/lib/Transforms/IPO/MergeSimilarFunctions.cpp
===
--- llvm/lib/Transforms/IPO/MergeSimilarFunctions.cpp
+++ llvm/lib/Transforms/IPO/MergeSimilarFunctions.cpp
@@ -273,7 +273,7 @@
 /// IntPtrType (get it from DataLayout). This is guaranteed to generate no-op
 /// casts, otherwise it will assert.
 static Value *createCastIfNeeded(Value *V, Type *DstType,
- Value *InstrOrBB, Type *IntPtrType) {
+ Value *InstrOrBB, Type *IntPtrType, const DataLayout *DL) {
   if (V->getType() == DstType)
 return V;
 
@@ -297,7 +297,7 @@
 = Builder.CreateExtractValue(V, ArrayRef(I));
   Value *Element = createCastIfNeeded(ExtractedValue,
   DstType->getStructElementType(I),
-  InstrOrBB, IntPtrType);
+  InstrOrBB, IntPtrType, DL);
   Result =
   Builder.CreateInsertValue(Result, Element, ArrayRef(I));
 }
@@ -325,7 +325,7 @@
 llvm_unreachable("Can only cast int -> ptr or ptr -> (ptr or int)");
   }
 
-  assert(cast(Result)->isNoopCast(IntPtrType) &&
+  assert(cast(Result)->isNoopCast(*DL) &&
   "Cast is not a no-op cast. Potential loss of precision");
 
   return Result;
@@ -1395,7 +1395,7 @@
   FunctionType *FFTy = F->getFunctionType();
   Type *IntPtrTy = DL->getIntPtrType(FFTy->getContext());
   for (auto  : Thunk->args()) {
-Value *Cast = createCastIfNeeded(, FFTy->getParamType(i), BB, IntPtrTy);
+Value *Cast = createCastIfNeeded(, FFTy->getParamType(i), BB, IntPtrTy, DL);
 Args.push_back(Cast);
 ++i;
   }
@@ -1416,7 +1416,7 @@
 else if (CI->getType()->isPointerTy() && RetTy->isIntegerTy())
   Builder.CreateRet(Builder.CreatePtrToInt(CI, RetTy));
 else {
-  Value *Cast = createCastIfNeeded(CI, RetTy, BB, IntPtrTy);
+  Value *Cast = createCastIfNeeded(CI, RetTy, BB, IntPtrTy, DL);
   Builder.CreateRet(Cast);
 }
   }
@@ -1550,7 +1550,7 @@
 Instruction *F1InstInNewF, const std::vector ,
 Function *NewF, ValueToValueMapTy ,
 const SmallVectorImpl ,
-Type *IntPtrTy) {
+Type *IntPtrTy, const DataLayout *DL) {
   assert(F2Insts.size() == Comps.size() &&
   "Mis-match between F2Insts & Comps!");
 
@@ -1598,7 +1598,7 @@
 Value *Cast = createCastIfNeeded(F2NewFOperand,
 F2OrigOperand->getType(),
 F2InstInNewF,
-IntPtrTy);
+IntPtrTy, DL);
 F2InstInNewF->setOperand(OpId, Cast);
   }
 }
@@ -1621,7 +1621,7 @@
 F2Ret->setOperand(0,
   createCastIfNeeded(F2Ret->getReturnValue(),
  F1Ret->getReturnValue()->getType(),
- F2Ret, IntPtrTy));
+ F2Ret, IntPtrTy, DL));
 }
   } else if (!F1InstInNewF->use_empty()) {
 // If the instructions have uses, we need to insert a PHI node.
@@ -1649,7 +1649,7 @@
 createCastIfNeeded(F2InstInNewF,
   F1IType,
   Terminators[FnI+1],
-  IntPtrTy));
+  IntPtrTy, DL));
   }
 
   Phi->addIncoming(F2InstInNewF, F2InstInNewF->getParent());
@@ -1742,7 +1742,7 @@
   const DataLayout *FTD = Fns[FnI]->getDataLayout();
   Type *IntPtrTy = FTD ? FTD->getIntPtrType(Ctx) : NULL;
   F2InValNewF = createCastIfNeeded(F2InValNewF, F1InValNewF->getType(),
-   InsertPt, IntPtrTy);
+   InsertPt, IntPtrTy, FTD);
 
   // Create compare & select
   Value *ChoiceArg = getLastArg(NewF);
@@ -1970,7 +1970,7 @@
   continue; // we already handled these above
 
 insertCondAndRemapInstructions(F1InstInNewF, F2Insts,
-  NewF, VMap, Fns, IntPtrType);
+  NewF, VMap, Fns, IntPtrType, DL);
   }
 
   //