<div></div><div>Author: davidxl<br/>Date: Fri Sep 29 15:30:34 2017<br/>New Revision: 314563<br/><br/>URL: http://llvm.org/viewvc/llvm-project?rev=314563&view=rev<br/>Log:<br/>Revert 314561 due to debug build assertion failure<br/><br/>Removed:<br/>    llvm/trunk/test/Transforms/InstCombine/intptr1.ll<br/>    llvm/trunk/test/Transforms/InstCombine/intptr2.ll<br/>    llvm/trunk/test/Transforms/InstCombine/intptr3.ll<br/>    llvm/trunk/test/Transforms/InstCombine/intptr4.ll<br/>Modified:<br/>    llvm/trunk/lib/Transforms/InstCombine/InstCombineInternal.h<br/>    llvm/trunk/lib/Transforms/InstCombine/InstCombinePHI.cpp<br/><br/>Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineInternal.h<br/>URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineInternal.h?rev=314563&r1=314562&r2=314563&view=diff<br/>==============================================================================<br/>--- llvm/trunk/lib/Transforms/InstCombine/InstCombineInternal.h (original)<br/>+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineInternal.h Fri Sep 29 15:30:34 2017<br/>@@ -670,10 +670,6 @@ private:<br/>   Instruction *FoldPHIArgGEPIntoPHI(PHINode &PN);<br/>   Instruction *FoldPHIArgLoadIntoPHI(PHINode &PN);<br/>   Instruction *FoldPHIArgZextsIntoPHI(PHINode &PN);<br/>-  /// If an integer typed PHI has only one use which is an IntToPtr operation,<br/>-  /// replace the PHI with an existing pointer typed PHI if it exists. Otherwise<br/>-  /// insert a new pointer typed PHI and replace the original one.<br/>-  Instruction *FoldIntegerTypedPHI(PHINode &PN);<br/> <br/>   /// Helper function for FoldPHIArgXIntoPHI() to get debug location for the<br/>   /// folded operation.<br/><br/>Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombinePHI.cpp<br/>URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombinePHI.cpp?rev=314563&r1=314562&r2=314563&view=diff<br/>==============================================================================<br/>--- llvm/trunk/lib/Transforms/InstCombine/InstCombinePHI.cpp (original)<br/>+++ llvm/trunk/lib/Transforms/InstCombine/InstCombinePHI.cpp Fri Sep 29 15:30:34 2017<br/>@@ -39,222 +39,6 @@ DebugLoc InstCombiner::PHIArgMergedDebug<br/>   return Loc;<br/> }<br/> <br/>-// Replace Integer typed PHI PN if the PHI's value is used as a pointer value.<br/>-// If there is an existing pointer typed PHI that produces the same value as PN,<br/>-// replace PN and the IntToPtr operation with it. Otherwise, synthesize a new<br/>-// PHI node:<br/>-//<br/>-// Case-1:<br/>-// bb1:<br/>-//     int_init = PtrToInt(ptr_init)<br/>-//     br label %bb2<br/>-// bb2:<br/>-//    int_val = PHI([int_init, %bb1], [int_val_inc, %bb2]<br/>-//    ptr_val = PHI([ptr_init, %bb1], [ptr_val_inc, %bb2]<br/>-//    ptr_val2 = IntToPtr(int_val)<br/>-//    ...<br/>-//    use(ptr_val2)<br/>-//    ptr_val_inc = ...<br/>-//    inc_val_inc = PtrToInt(ptr_val_inc)<br/>-//<br/>-// ==><br/>-// bb1:<br/>-//     br label %bb2<br/>-// bb2:<br/>-//    ptr_val = PHI([ptr_init, %bb1], [ptr_val_inc, %bb2]<br/>-//    ...<br/>-//    use(ptr_val)<br/>-//    ptr_val_inc = ...<br/>-//<br/>-// Case-2:<br/>-// bb1:<br/>-//    int_ptr = BitCast(ptr_ptr)<br/>-//    int_init = Load(int_ptr)<br/>-//    br label %bb2<br/>-// bb2:<br/>-//    int_val = PHI([int_init, %bb1], [int_val_inc, %bb2]<br/>-//    ptr_val2 = IntToPtr(int_val)<br/>-//    ...<br/>-//    use(ptr_val2)<br/>-//    ptr_val_inc = ...<br/>-//    inc_val_inc = PtrToInt(ptr_val_inc)<br/>-// ==><br/>-// bb1:<br/>-//    ptr_init = Load(ptr_ptr)<br/>-//    br label %bb2<br/>-// bb2:<br/>-//    ptr_val = PHI([ptr_init, %bb1], [ptr_val_inc, %bb2]<br/>-//    ...<br/>-//    use(ptr_val)<br/>-//    ptr_val_inc = ...<br/>-//    ...<br/>-//<br/>-Instruction *InstCombiner::FoldIntegerTypedPHI(PHINode &PN) {<br/>-  if (!PN.getType()->isIntegerTy())<br/>-    return nullptr;<br/>-  if (!PN.hasOneUse())<br/>-    return nullptr;<br/>-<br/>-  auto *IntToPtr = dyn_cast<IntToPtrInst>(PN.user_back());<br/>-  if (!IntToPtr)<br/>-    return nullptr;<br/>-<br/>-  // Check if the pointer is actually used as pointer:<br/>-  auto HasPointerUse = [](Instruction *IIP) {<br/>-    for (User *U : IIP->users()) {<br/>-      Value *Ptr = nullptr;<br/>-      if (LoadInst *LoadI = dyn_cast<LoadInst>(U)) {<br/>-        Ptr = LoadI->getPointerOperand();<br/>-      } else if (StoreInst *SI = dyn_cast<StoreInst>(U)) {<br/>-        Ptr = SI->getPointerOperand();<br/>-      } else if (GetElementPtrInst *GI = dyn_cast<GetElementPtrInst>(U)) {<br/>-        Ptr = GI->getPointerOperand();<br/>-      }<br/>-<br/>-      if (Ptr && Ptr == IIP)<br/>-        return true;<br/>-    }<br/>-    return false;<br/>-  };<br/>-<br/>-  if (!HasPointerUse(IntToPtr))<br/>-    return nullptr;<br/>-<br/>-  if (DL.getPointerSizeInBits(IntToPtr->getAddressSpace()) !=<br/>-      DL.getTypeSizeInBits(IntToPtr->getOperand(0)->getType()))<br/>-    return nullptr;<br/>-<br/>-  SmallVector<Value *, 4> AvailablePtrVals;<br/>-  for (unsigned i = 0; i != PN.getNumIncomingValues(); ++i) {<br/>-    Value *Arg = PN.getIncomingValue(i);<br/>-<br/>-    // First look backward:<br/>-    if (auto *PI = dyn_cast<PtrToIntInst>(Arg)) {<br/>-      AvailablePtrVals.emplace_back(PI->getOperand(0));<br/>-      continue;<br/>-    }<br/>-<br/>-    // Next look forward:<br/>-    Value *ArgIntToPtr = nullptr;<br/>-    for (User *U : Arg->users()) {<br/>-      if (isa<IntToPtrInst>(U) && U->getType() == IntToPtr->getType() &&<br/>-          (DT.dominates(cast<Instruction>(U), PN.getIncomingBlock(i)) ||<br/>-           cast<Instruction>(U)->getParent() == PN.getIncomingBlock(i))) {<br/>-        ArgIntToPtr = U;<br/>-        break;<br/>-      }<br/>-    }<br/>-<br/>-    if (ArgIntToPtr) {<br/>-      AvailablePtrVals.emplace_back(ArgIntToPtr);<br/>-      continue;<br/>-    }<br/>-<br/>-    // If Arg is defined by a PHI, allow it. This will also create<br/>-    // more opportunities iteratively.<br/>-    if (isa<PHINode>(Arg)) {<br/>-      AvailablePtrVals.emplace_back(Arg);<br/>-      continue;<br/>-    }<br/>-<br/>-    // For a single use integer load:<br/>-    auto *LoadI = dyn_cast<LoadInst>(Arg);<br/>-    if (!LoadI)<br/>-      return nullptr;<br/>-<br/>-    if (!LoadI->hasOneUse())<br/>-      return nullptr;<br/>-<br/>-    // Push the integer typed Load instruction into the available<br/>-    // value set, and fix it up later when the pointer typed PHI<br/>-    // is synthesized.<br/>-    AvailablePtrVals.emplace_back(LoadI);<br/>-  }<br/>-<br/>-  // Now search for a matching PHI<br/>-  auto *BB = PN.getParent();<br/>-  assert(AvailablePtrVals.size() == PN.getNumIncomingValues() &&<br/>-         "Not enough available ptr typed incoming values");<br/>-  PHINode *MatchingPtrPHI = nullptr;<br/>-  for (auto II = BB->begin(), EI = BasicBlock::iterator(BB->getFirstNonPHI());<br/>-       II != EI; II++) {<br/>-    PHINode *PtrPHI = dyn_cast<PHINode>(II);<br/>-    if (!PtrPHI || PtrPHI == &PN)<br/>-      continue;<br/>-    MatchingPtrPHI = PtrPHI;<br/>-    for (unsigned i = 0; i != PtrPHI->getNumIncomingValues(); ++i) {<br/>-      if (AvailablePtrVals[i] != PtrPHI->getIncomingValue(i)) {<br/>-        MatchingPtrPHI = nullptr;<br/>-        break;<br/>-      }<br/>-    }<br/>-<br/>-    if (MatchingPtrPHI)<br/>-      break;<br/>-  }<br/>-<br/>-  if (MatchingPtrPHI) {<br/>-    assert(MatchingPtrPHI->getType() == IntToPtr->getType() &&<br/>-           "Phi's Type does not match with IntToPtr");<br/>-    // The PtrToCast + IntToPtr will be simplified later<br/>-    return CastInst::CreateBitOrPointerCast(MatchingPtrPHI,<br/>-                                            IntToPtr->getOperand(0)->getType());<br/>-  }<br/>-<br/>-  // If it requires a conversion for every PHI operand, do not do it.<br/>-  if (std::all_of(AvailablePtrVals.begin(), AvailablePtrVals.end(),<br/>-                  [&](Value *V) {<br/>-                    return (V->getType() != IntToPtr->getType()) ||<br/>-                           isa<IntToPtrInst>(V);<br/>-                  }))<br/>-    return nullptr;<br/>-<br/>-  PHINode *NewPtrPHI = PHINode::Create(<br/>-      IntToPtr->getType(), PN.getNumIncomingValues(), PN.getName() + ".ptr");<br/>-<br/>-  InsertNewInstBefore(NewPtrPHI, PN);<br/>-  for (unsigned i = 0; i != PN.getNumIncomingValues(); ++i) {<br/>-    auto *IncomingBB = PN.getIncomingBlock(i);<br/>-    auto *IncomingVal = AvailablePtrVals[i];<br/>-<br/>-    if (IncomingVal->getType() == IntToPtr->getType()) {<br/>-      NewPtrPHI->addIncoming(IncomingVal, IncomingBB);<br/>-      continue;<br/>-    }<br/>-<br/>-#ifndef NDEBUG<br/>-    LoadInst *LoadI = dyn_cast<LoadInst>(IncomingVal);<br/>-    assert((isa<PHINode>(IncomingVal) || (LoadI && LoadI->hasOneUse())) &&<br/>-           "Can not replace LoadInst with multiple uses");<br/>-#endif<br/>-    // Need to insert a BitCast.<br/>-    // For an integer Load instruction with a single use, the load + IntToPtr<br/>-    // cast will be simplified into a pointer load:<br/>-    // %v = load i64, i64* %a.ip, align 8<br/>-    // %v.cast = inttoptr i64 %v to float **<br/>-    // ==><br/>-    // %v.ptrp = bitcast i64 * %a.ip to float **<br/>-    // %v.cast = load float *, float ** %v.ptrp, align 8<br/>-    auto *CI = CastInst::CreateBitOrPointerCast(<br/>-        IncomingVal, IntToPtr->getType(), IncomingVal->getName() + ".ptr");<br/>-    if (auto *IncomingI = dyn_cast<Instruction>(IncomingVal)) {<br/>-      BasicBlock::iterator InsertPos(IncomingI);<br/>-      InsertPos++;<br/>-      if (isa<PHINode>(IncomingI))<br/>-        InsertPos = IncomingI->getParent()->getFirstInsertionPt();<br/>-      InsertNewInstBefore(CI, *InsertPos);<br/>-    } else {<br/>-      auto *InsertBB = &IncomingBB->getParent()->getEntryBlock();<br/>-      InsertNewInstBefore(CI, *InsertBB->getFirstInsertionPt());<br/>-    }<br/>-    NewPtrPHI->addIncoming(CI, IncomingBB);<br/>-  }<br/>-<br/>-  // The PtrToCast + IntToPtr will be simplified later<br/>-  return CastInst::CreateBitOrPointerCast(NewPtrPHI,<br/>-                                          IntToPtr->getOperand(0)->getType());<br/>-}<br/>-<br/> /// If we have something like phi [add (a,b), add(a,c)] and if a/b/c and the<br/> /// adds all have a single use, turn this into a phi and a single binop.<br/> Instruction *InstCombiner::FoldPHIArgBinOpIntoPHI(PHINode &PN) {<br/>@@ -1118,9 +902,6 @@ Instruction *InstCombiner::visitPHINode(<br/>   // this PHI only has a single use (a PHI), and if that PHI only has one use (a<br/>   // PHI)... break the cycle.<br/>   if (PN.hasOneUse()) {<br/>-    if (Instruction *Result = FoldIntegerTypedPHI(PN))<br/>-      return Result;<br/>-<br/>     Instruction *PHIUser = cast<Instruction>(PN.user_back());<br/>     if (PHINode *PU = dyn_cast<PHINode>(PHIUser)) {<br/>       SmallPtrSet<PHINode*, 16> PotentiallyDeadPHIs;<br/><br/>Removed: llvm/trunk/test/Transforms/InstCombine/intptr1.ll<br/>URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/intptr1.ll?rev=314562&view=auto<br/>==============================================================================<br/>--- llvm/trunk/test/Transforms/InstCombine/intptr1.ll (original)<br/>+++ llvm/trunk/test/Transforms/InstCombine/intptr1.ll (removed)<br/>@@ -1,181 +0,0 @@<br/>-; RUN: opt < %s  -instcombine  -S | FileCheck %s<br/>-<br/>-<br/>-define void @test1(float* %a, float* readnone %a_end, i64* %b.i64) {<br/>-; CHECK-LABEL: @test1<br/>-entry:<br/>-  %cmp1 = icmp ult float* %a, %a_end<br/>-  br i1 %cmp1, label %for.body.preheader, label %for.end<br/>-<br/>-for.body.preheader:                               ; preds = %entry<br/>-  %b = load i64, i64* %b.i64, align 8<br/>-; CHECK: load float*, float**<br/>-  br label %for.body<br/>-<br/>-for.body:                                         ; preds = %for.body, %for.body.preheader<br/>-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-  %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]<br/>-<br/>-; CHECK: %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-; CHECK: %b.addr.02.ptr = phi float* [ %add, %for.body ],<br/>-; CHECK-NOT: %b.addr.02 = phi i64<br/>-<br/>-  %tmp = inttoptr i64 %b.addr.02 to float*<br/>-; CHECK-NOT: inttoptr i64<br/>-  %tmp1 = load float, float* %tmp, align 4<br/>-  %mul.i = fmul float %tmp1, 4.200000e+01<br/>-  store float %mul.i, float* %a.addr.03, align 4<br/>-  %add = getelementptr inbounds float, float* %tmp, i64 1<br/>-  %add.int = ptrtoint float* %add to i64<br/>-; CHECK-NOT: ptrtoint float*<br/>-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1<br/>-  %cmp = icmp ult float* %incdec.ptr, %a_end<br/>-  br i1 %cmp, label %for.body, label %for.end<br/>-<br/>-for.end:                                          ; preds = %for.body, %entry<br/>-  ret void<br/>-}<br/>-<br/>-define void @test1_neg(float* %a, float* readnone %a_end, i64* %b.i64) {<br/>-; CHECK-LABEL: @test1_neg<br/>-entry:<br/>-  %cmp1 = icmp ult float* %a, %a_end<br/>-  br i1 %cmp1, label %for.body.preheader, label %for.end<br/>-<br/>-for.body.preheader:                               ; preds = %entry<br/>-  %b = load i64, i64* %b.i64, align 8<br/>-  br label %for.body<br/>-<br/>-for.body:                                         ; preds = %for.body, %for.body.preheader<br/>-  %a.addr.03 = phi float* [ %incdec.ptr, %bb ], [ %a, %for.body.preheader ]<br/>-  %b.addr.02 = phi i64 [ %add.int, %bb ], [ %b, %for.body.preheader ]<br/>-<br/>-; CHECK: %a.addr.03 = phi float* [ %incdec.ptr, %bb ], [ %a, %for.body.preheader ]<br/>-; CHECK: %b.addr.02 = phi i64<br/>-<br/>-  %tmp = inttoptr i64 %b.addr.02 to float*<br/>-; CHECK: inttoptr i64<br/>-  %ptrcmp = icmp ult float* %tmp, %a_end<br/>-  br i1 %ptrcmp, label %for.end, label %bb<br/>-<br/>-bb:<br/>-  %tmp1 = load float, float* %a, align 4<br/>-  %mul.i = fmul float %tmp1, 4.200000e+01<br/>-  store float %mul.i, float* %a.addr.03, align 4<br/>-  %add = getelementptr inbounds float, float* %a, i64 1<br/>-  %add.int = ptrtoint float* %add to i64<br/>-; CHECK: ptrtoint float*<br/>-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1<br/>-  %cmp = icmp ult float* %incdec.ptr, %a_end<br/>-  br i1 %cmp, label %for.body, label %for.end<br/>-<br/>-for.end:                                          ; preds = %for.body, %entry<br/>-  ret void<br/>-}<br/>-<br/>-<br/>-define void @test2(float* %a, float* readnone %a_end, float** %b.float) {<br/>-; CHECK-LABEL: @test2<br/>-entry:<br/>-  %cmp1 = icmp ult float* %a, %a_end<br/>-  br i1 %cmp1, label %for.body.preheader, label %for.end<br/>-<br/>-for.body.preheader:                               ; preds = %entry<br/>-  %b.i64 = bitcast float** %b.float to i64*<br/>-  %b = load i64, i64* %b.i64, align 8<br/>-; CHECK: load float*, float**<br/>-  br label %for.body<br/>-<br/>-for.body:                                         ; preds = %for.body, %for.body.preheader<br/>-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-  %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]<br/>-<br/>-; CHECK: %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-; CHECK: %b.addr.02.ptr = phi float* [ %add, %for.body ],<br/>-; CHECK-NOT: %b.addr.02 = phi i64<br/>-<br/>-  %tmp = inttoptr i64 %b.addr.02 to float*<br/>-; CHECK-NOT: inttoptr i64<br/>-  %tmp1 = load float, float* %tmp, align 4<br/>-  %mul.i = fmul float %tmp1, 4.200000e+01<br/>-  store float %mul.i, float* %a.addr.03, align 4<br/>-  %add = getelementptr inbounds float, float* %tmp, i64 1<br/>-  %add.int = ptrtoint float* %add to i64<br/>-; CHECK-NOT: ptrtoint float*<br/>-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1<br/>-  %cmp = icmp ult float* %incdec.ptr, %a_end<br/>-  br i1 %cmp, label %for.body, label %for.end<br/>-<br/>-for.end:                                          ; preds = %for.body, %entry<br/>-  ret void<br/>-}<br/>-<br/>-<br/>-define void @test3(float* %a, float* readnone %a_end, i8** %b.i8p) {<br/>-; CHECK-LABEL: @test3<br/>-entry:<br/>-  %cmp1 = icmp ult float* %a, %a_end<br/>-  br i1 %cmp1, label %for.body.preheader, label %for.end<br/>-<br/>-for.body.preheader:                               ; preds = %entry<br/>-  %b.i64 = bitcast i8** %b.i8p to i64*<br/>-  %b = load i64, i64* %b.i64, align 8<br/>-; CHECK: load float*, float**<br/>-  br label %for.body<br/>-<br/>-for.body:                                         ; preds = %for.body, %for.body.preheader<br/>-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-  %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]<br/>-<br/>-; CHECK: %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-; CHECK: %b.addr.02.ptr = phi float* [ %add, %for.body ],<br/>-; CHECK-NOT: %b.addr.02 = phi i64<br/>-<br/>-  %tmp = inttoptr i64 %b.addr.02 to float*<br/>-; CHECK-NOT: inttoptr i64<br/>-  %tmp1 = load float, float* %tmp, align 4<br/>-  %mul.i = fmul float %tmp1, 4.200000e+01<br/>-  store float %mul.i, float* %a.addr.03, align 4<br/>-  %add = getelementptr inbounds float, float* %tmp, i64 1<br/>-  %add.int = ptrtoint float* %add to i64<br/>-; CHECK-NOT: ptrtoint float*<br/>-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1<br/>-  %cmp = icmp ult float* %incdec.ptr, %a_end<br/>-  br i1 %cmp, label %for.body, label %for.end<br/>-<br/>-for.end:                                          ; preds = %for.body, %entry<br/>-  ret void<br/>-}<br/>-<br/>-<br/>-define void @test4(float* %a, float* readnone %a_end, float** %b.float) {<br/>-entry:<br/>-; CHECK-LABEL: @test4<br/>-  %cmp1 = icmp ult float* %a, %a_end<br/>-  br i1 %cmp1, label %for.body.preheader, label %for.end<br/>-<br/>-for.body.preheader:                               ; preds = %entry<br/>-  %b.f = load float*, float** %b.float, align 8<br/>-  %b = ptrtoint float* %b.f to i64<br/>-; CHECK: load float*, float**<br/>-; CHECK-NOT: ptrtoint float*<br/>-  br label %for.body<br/>-<br/>-for.body:                                         ; preds = %for.body, %for.body.preheader<br/>-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-  %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]<br/>-  %tmp = inttoptr i64 %b.addr.02 to float*<br/>-; CHECK-NOT: inttoptr i64<br/>-  %tmp1 = load float, float* %tmp, align 4<br/>-  %mul.i = fmul float %tmp1, 4.200000e+01<br/>-  store float %mul.i, float* %a.addr.03, align 4<br/>-  %add = getelementptr inbounds float, float* %tmp, i64 1<br/>-  %add.int = ptrtoint float* %add to i64<br/>-; CHECK-NOT: ptrtoint float*<br/>-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1<br/>-  %cmp = icmp ult float* %incdec.ptr, %a_end<br/>-  br i1 %cmp, label %for.body, label %for.end<br/>-<br/>-for.end:                                          ; preds = %for.body, %entry<br/>-  ret void<br/>-}<br/><br/>Removed: llvm/trunk/test/Transforms/InstCombine/intptr2.ll<br/>URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/intptr2.ll?rev=314562&view=auto<br/>==============================================================================<br/>--- llvm/trunk/test/Transforms/InstCombine/intptr2.ll (original)<br/>+++ llvm/trunk/test/Transforms/InstCombine/intptr2.ll (removed)<br/>@@ -1,37 +0,0 @@<br/>-; RUN: opt < %s  -instcombine -S | FileCheck %s<br/>-<br/>-define void @test1(float* %a, float* readnone %a_end, i32* %b.i) {<br/>-; CHECK-LABEL: @test1<br/>-entry:<br/>-  %cmp1 = icmp ult float* %a, %a_end<br/>-  br i1 %cmp1, label %for.body.preheader, label %for.end<br/>-<br/>-for.body.preheader:                               ; preds = %entry<br/>-  %b = ptrtoint i32 * %b.i to i64<br/>-; CHECK: bitcast<br/>-; CHECK-NOT: ptrtoint<br/>-  br label %for.body<br/>-<br/>-for.body:                                         ; preds = %for.body, %for.body.preheader<br/>-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-  %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]<br/>-<br/>-; CHECK:  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-; CHECK-NOT: phi i64 <br/>-<br/>-  %tmp = inttoptr i64 %b.addr.02 to float*<br/>-; CHECK-NOT: inttoptr<br/>-  %tmp1 = load float, float* %tmp, align 4<br/>-  %mul.i = fmul float %tmp1, 4.200000e+01<br/>-  store float %mul.i, float* %a.addr.03, align 4<br/>-  %add = getelementptr inbounds float, float* %tmp, i64 1<br/>-  %add.int = ptrtoint float* %add to i64<br/>-; CHECK-NOT: ptrtoint<br/>-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1<br/>-  %cmp = icmp ult float* %incdec.ptr, %a_end<br/>-  br i1 %cmp, label %for.body, label %for.end<br/>-<br/>-for.end:                                          ; preds = %for.body, %entry<br/>-  ret void<br/>-}<br/>-<br/><br/>Removed: llvm/trunk/test/Transforms/InstCombine/intptr3.ll<br/>URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/intptr3.ll?rev=314562&view=auto<br/>==============================================================================<br/>--- llvm/trunk/test/Transforms/InstCombine/intptr3.ll (original)<br/>+++ llvm/trunk/test/Transforms/InstCombine/intptr3.ll (removed)<br/>@@ -1,37 +0,0 @@<br/>-; RUN: opt < %s  -instcombine -S | FileCheck %s<br/>-<br/>-<br/>-define  void @test(float* %a, float* readnone %a_end, i64 %b) unnamed_addr  {<br/>-entry:<br/>-  %cmp1 = icmp ult float* %a, %a_end<br/>-  br i1 %cmp1, label %for.body.preheader, label %for.end<br/>-<br/>-for.body.preheader:                               ; preds = %entry<br/>-  %b.float = inttoptr i64 %b to float*<br/>-  br label %for.body<br/>-<br/>-for.body:                                         ; preds = %for.body.preheader, %for.body<br/>-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-  %b.addr.float = phi float* [ %b.addr.float.inc, %for.body ], [ %b.float, %for.body.preheader ]<br/>-  %b.addr.i64 = phi i64 [ %b.addr.i64.inc, %for.body ], [ %b, %for.body.preheader ]<br/>-; CHECK: %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-; CHECK-NEXT:  %b.addr.float = phi float* [ %b.addr.float.inc, %for.body ], [ %b.float, %for.body.preheader ]<br/>-; CHECK-NEXT: = load float<br/>-  %l = load float, float* %b.addr.float, align 4 <br/>-  %mul.i = fmul float %l, 4.200000e+01<br/>-  store float %mul.i, float* %a.addr.03, align 4<br/>-  %b.addr.float.2 = inttoptr i64 %b.addr.i64 to float*<br/>-; CHECK-NOT: inttoptr<br/>-  %b.addr.float.inc = getelementptr inbounds float, float* %b.addr.float.2, i64 1<br/>-  %b.addr.i64.inc = ptrtoint float* %b.addr.float.inc to i64<br/>-; CHECK-NOT: ptrtoint<br/>-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1<br/>-  %cmp = icmp ult float* %incdec.ptr, %a_end<br/>-  br i1 %cmp, label %for.body, label %for.end<br/>-<br/>-for.end:                                          ; preds = %for.body, %entry<br/>-  ret void<br/>-}<br/>-<br/>-<br/>-<br/><br/>Removed: llvm/trunk/test/Transforms/InstCombine/intptr4.ll<br/>URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/intptr4.ll?rev=314562&view=auto<br/>==============================================================================<br/>--- llvm/trunk/test/Transforms/InstCombine/intptr4.ll (original)<br/>+++ llvm/trunk/test/Transforms/InstCombine/intptr4.ll (removed)<br/>@@ -1,47 +0,0 @@<br/>-; RUN: opt < %s  -instcombine -S | FileCheck %s<br/>-<br/>-<br/>-define  void @test(float* %a, float* readnone %a_end, i64 %b, float* %bf) unnamed_addr  {<br/>-entry:<br/>-  %cmp1 = icmp ult float* %a, %a_end<br/>-  %b.float = inttoptr i64 %b to float*<br/>-  br i1 %cmp1, label %bb1, label %bb2<br/>-<br/>-bb1:<br/>- br label %for.body.preheader<br/>-bb2:<br/>- %bfi = ptrtoint float* %bf to i64<br/>- br label %for.body.preheader<br/>-<br/>-for.body.preheader:                               ; preds = %entry<br/>-  %b.phi = phi i64 [%b, %bb1], [%bfi, %bb2]<br/>-; CHECK-LABEL: for.body.preheader<br/>-; CHECK-NOT: %b.phi = phi i64<br/>-  br label %for.body<br/>-<br/>-for.body:                                         ; preds = %for.body.preheader, %for.body<br/>-; CHECK-LABEL: for.body<br/>-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-  %b.addr.float = phi float* [ %b.addr.float.inc, %for.body ], [ %b.float, %for.body.preheader ]<br/>-  %b.addr.i64 = phi i64 [ %b.addr.i64.inc, %for.body ], [ %b.phi, %for.body.preheader ]<br/>-; CHECK: %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]<br/>-; CHECK-NEXT:  %b.addr.float = phi float* [ %b.addr.float.inc, %for.body ], [ %b.float, %for.body.preheader ]<br/>-; CHECK-NOT: = %b.addr.i64<br/>-  %l = load float, float* %b.addr.float, align 4 <br/>-  %mul.i = fmul float %l, 4.200000e+01<br/>-  store float %mul.i, float* %a.addr.03, align 4<br/>-  %b.addr.float.2 = inttoptr i64 %b.addr.i64 to float*<br/>-; CHECK-NOT: inttoptr<br/>-  %b.addr.float.inc = getelementptr inbounds float, float* %b.addr.float.2, i64 1<br/>-  %b.addr.i64.inc = ptrtoint float* %b.addr.float.inc to i64<br/>-; CHECK-NOT: ptrtoint<br/>-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1<br/>-  %cmp = icmp ult float* %incdec.ptr, %a_end<br/>-  br i1 %cmp, label %for.body, label %for.end<br/>-<br/>-for.end:                                          ; preds = %for.body, %entry<br/>-  ret void<br/>-}<br/>-<br/>-<br/>-<br/><br/><br/>_______________________________________________<br/>llvm-commits mailing list<br/>llvm-commits@lists.llvm.org<br/>http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br/></div>