|  | Index: include/llvm/Intrinsics.td | 
|  | =================================================================== | 
|  | --- include/llvm/Intrinsics.td	(revision 3710) | 
|  | +++ include/llvm/Intrinsics.td	(working copy) | 
|  | @@ -439,10 +439,10 @@ | 
|  | // Target-specific intrinsics | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | -include "llvm/IntrinsicsPowerPC.td" | 
|  | +//include "llvm/IntrinsicsPowerPC.td" | 
|  | include "llvm/IntrinsicsX86.td" | 
|  | -include "llvm/IntrinsicsARM.td" | 
|  | -include "llvm/IntrinsicsCellSPU.td" | 
|  | -include "llvm/IntrinsicsAlpha.td" | 
|  | -include "llvm/IntrinsicsXCore.td" | 
|  | -include "llvm/IntrinsicsPTX.td" | 
|  | +//include "llvm/IntrinsicsARM.td" | 
|  | +//include "llvm/IntrinsicsCellSPU.td" | 
|  | +//include "llvm/IntrinsicsAlpha.td" | 
|  | +//include "llvm/IntrinsicsXCore.td" | 
|  | +//include "llvm/IntrinsicsPTX.td" | 
|  | Index: lib/Analysis/BasicAliasAnalysis.cpp | 
|  | =================================================================== | 
|  | --- lib/Analysis/BasicAliasAnalysis.cpp	(revision 3710) | 
|  | +++ lib/Analysis/BasicAliasAnalysis.cpp	(working copy) | 
|  | @@ -785,27 +785,27 @@ | 
|  | return NoModRef; | 
|  | break; | 
|  | } | 
|  | -    case Intrinsic::arm_neon_vld1: { | 
|  | -      // LLVM's vld1 and vst1 intrinsics currently only support a single | 
|  | -      // vector register. | 
|  | -      uint64_t Size = | 
|  | -        TD ? TD->getTypeStoreSize(II->getType()) : UnknownSize; | 
|  | -      if (isNoAlias(Location(II->getArgOperand(0), Size, | 
|  | -                             II->getMetadata(LLVMContext::MD_tbaa)), | 
|  | -                    Loc)) | 
|  | -        return NoModRef; | 
|  | -      break; | 
|  | +    //case Intrinsic::arm_neon_vld1: { | 
|  | +    //  // LLVM's vld1 and vst1 intrinsics currently only support a single | 
|  | +    //  // vector register. | 
|  | +    //  uint64_t Size = | 
|  | +    //    TD ? TD->getTypeStoreSize(II->getType()) : UnknownSize; | 
|  | +    //  if (isNoAlias(Location(II->getArgOperand(0), Size, | 
|  | +    //                         II->getMetadata(LLVMContext::MD_tbaa)), | 
|  | +    //                Loc)) | 
|  | +    //    return NoModRef; | 
|  | +    //  break; | 
|  | +    //} | 
|  | +    //case Intrinsic::arm_neon_vst1: { | 
|  | +    //  uint64_t Size = | 
|  | +    //    TD ? TD->getTypeStoreSize(II->getArgOperand(1)->getType()) : UnknownSize; | 
|  | +    //  if (isNoAlias(Location(II->getArgOperand(0), Size, | 
|  | +    //                         II->getMetadata(LLVMContext::MD_tbaa)), | 
|  | +    //                Loc)) | 
|  | +    //    return NoModRef; | 
|  | +    //  break; | 
|  | +    //} | 
|  | } | 
|  | -    case Intrinsic::arm_neon_vst1: { | 
|  | -      uint64_t Size = | 
|  | -        TD ? TD->getTypeStoreSize(II->getArgOperand(1)->getType()) : UnknownSize; | 
|  | -      if (isNoAlias(Location(II->getArgOperand(0), Size, | 
|  | -                             II->getMetadata(LLVMContext::MD_tbaa)), | 
|  | -                    Loc)) | 
|  | -        return NoModRef; | 
|  | -      break; | 
|  | -    } | 
|  | -    } | 
|  |  | 
|  | // We can bound the aliasing properties of memset_pattern16 just as we can | 
|  | // for memcpy/memset.  This is particularly important because the | 
|  | Index: lib/Transforms/InstCombine/InstCombineCalls.cpp | 
|  | =================================================================== | 
|  | --- lib/Transforms/InstCombine/InstCombineCalls.cpp	(revision 3710) | 
|  | +++ lib/Transforms/InstCombine/InstCombineCalls.cpp	(working copy) | 
|  | @@ -544,25 +544,25 @@ | 
|  | } | 
|  | } | 
|  | break; | 
|  | -  case Intrinsic::ppc_altivec_lvx: | 
|  | -  case Intrinsic::ppc_altivec_lvxl: | 
|  | -    // Turn PPC lvx -> load if the pointer is known aligned. | 
|  | -    if (getOrEnforceKnownAlignment(II->getArgOperand(0), 16, TD) >= 16) { | 
|  | -      Value *Ptr = Builder->CreateBitCast(II->getArgOperand(0), | 
|  | -                                         PointerType::getUnqual(II->getType())); | 
|  | -      return new LoadInst(Ptr); | 
|  | -    } | 
|  | -    break; | 
|  | -  case Intrinsic::ppc_altivec_stvx: | 
|  | -  case Intrinsic::ppc_altivec_stvxl: | 
|  | -    // Turn stvx -> store if the pointer is known aligned. | 
|  | -    if (getOrEnforceKnownAlignment(II->getArgOperand(1), 16, TD) >= 16) { | 
|  | -      Type *OpPtrTy = | 
|  | -        PointerType::getUnqual(II->getArgOperand(0)->getType()); | 
|  | -      Value *Ptr = Builder->CreateBitCast(II->getArgOperand(1), OpPtrTy); | 
|  | -      return new StoreInst(II->getArgOperand(0), Ptr); | 
|  | -    } | 
|  | -    break; | 
|  | +  //case Intrinsic::ppc_altivec_lvx: | 
|  | +  //case Intrinsic::ppc_altivec_lvxl: | 
|  | +  //  // Turn PPC lvx -> load if the pointer is known aligned. | 
|  | +  //  if (getOrEnforceKnownAlignment(II->getArgOperand(0), 16, TD) >= 16) { | 
|  | +  //    Value *Ptr = Builder->CreateBitCast(II->getArgOperand(0), | 
|  | +  //                                       PointerType::getUnqual(II->getType())); | 
|  | +  //    return new LoadInst(Ptr); | 
|  | +  //  } | 
|  | +  //  break; | 
|  | +  //case Intrinsic::ppc_altivec_stvx: | 
|  | +  //case Intrinsic::ppc_altivec_stvxl: | 
|  | +  //  // Turn stvx -> store if the pointer is known aligned. | 
|  | +  //  if (getOrEnforceKnownAlignment(II->getArgOperand(1), 16, TD) >= 16) { | 
|  | +  //    Type *OpPtrTy = | 
|  | +  //      PointerType::getUnqual(II->getArgOperand(0)->getType()); | 
|  | +  //    Value *Ptr = Builder->CreateBitCast(II->getArgOperand(1), OpPtrTy); | 
|  | +  //    return new StoreInst(II->getArgOperand(0), Ptr); | 
|  | +  //  } | 
|  | +  //  break; | 
|  | case Intrinsic::x86_sse_storeu_ps: | 
|  | case Intrinsic::x86_sse2_storeu_pd: | 
|  | case Intrinsic::x86_sse2_storeu_dq: | 
|  | @@ -619,79 +619,79 @@ | 
|  | break; | 
|  | } | 
|  |  | 
|  | -  case Intrinsic::ppc_altivec_vperm: | 
|  | -    // Turn vperm(V1,V2,mask) -> shuffle(V1,V2,mask) if mask is a constant. | 
|  | -    if (ConstantVector *Mask = dyn_cast<ConstantVector>(II->getArgOperand(2))) { | 
|  | -      assert(Mask->getNumOperands() == 16 && "Bad type for intrinsic!"); | 
|  | - | 
|  | -      // Check that all of the elements are integer constants or undefs. | 
|  | -      bool AllEltsOk = true; | 
|  | -      for (unsigned i = 0; i != 16; ++i) { | 
|  | -        if (!isa<ConstantInt>(Mask->getOperand(i)) && | 
|  | -            !isa<UndefValue>(Mask->getOperand(i))) { | 
|  | -          AllEltsOk = false; | 
|  | -          break; | 
|  | -        } | 
|  | -      } | 
|  | - | 
|  | -      if (AllEltsOk) { | 
|  | -        // Cast the input vectors to byte vectors. | 
|  | -        Value *Op0 = Builder->CreateBitCast(II->getArgOperand(0), | 
|  | -                                            Mask->getType()); | 
|  | -        Value *Op1 = Builder->CreateBitCast(II->getArgOperand(1), | 
|  | -                                            Mask->getType()); | 
|  | -        Value *Result = UndefValue::get(Op0->getType()); | 
|  | - | 
|  | -        // Only extract each element once. | 
|  | -        Value *ExtractedElts[32]; | 
|  | -        memset(ExtractedElts, 0, sizeof(ExtractedElts)); | 
|  | - | 
|  | -        for (unsigned i = 0; i != 16; ++i) { | 
|  | -          if (isa<UndefValue>(Mask->getOperand(i))) | 
|  | -            continue; | 
|  | -          unsigned Idx=cast<ConstantInt>(Mask->getOperand(i))->getZExtValue(); | 
|  | -          Idx &= 31;  // Match the hardware behavior. | 
|  | - | 
|  | -          if (ExtractedElts[Idx] == 0) { | 
|  | -            ExtractedElts[Idx] = | 
|  | -              Builder->CreateExtractElement(Idx < 16 ? Op0 : Op1, | 
|  | -                                            Builder->getInt32(Idx&15)); | 
|  | -          } | 
|  | - | 
|  | -          // Insert this value into the result vector. | 
|  | -          Result = Builder->CreateInsertElement(Result, ExtractedElts[Idx], | 
|  | -                                                Builder->getInt32(i)); | 
|  | -        } | 
|  | -        return CastInst::Create(Instruction::BitCast, Result, CI.getType()); | 
|  | -      } | 
|  | -    } | 
|  | -    break; | 
|  | +  //case Intrinsic::ppc_altivec_vperm: | 
|  | +  //  // Turn vperm(V1,V2,mask) -> shuffle(V1,V2,mask) if mask is a constant. | 
|  | +  //  if (ConstantVector *Mask = dyn_cast<ConstantVector>(II->getArgOperand(2))) { | 
|  | +  //    assert(Mask->getNumOperands() == 16 && "Bad type for intrinsic!"); | 
|  | +  // | 
|  | +  //    // Check that all of the elements are integer constants or undefs. | 
|  | +  //    bool AllEltsOk = true; | 
|  | +  //    for (unsigned i = 0; i != 16; ++i) { | 
|  | +  //      if (!isa<ConstantInt>(Mask->getOperand(i)) && | 
|  | +  //          !isa<UndefValue>(Mask->getOperand(i))) { | 
|  | +  //        AllEltsOk = false; | 
|  | +  //        break; | 
|  | +  //      } | 
|  | +  //    } | 
|  | +  // | 
|  | +  //    if (AllEltsOk) { | 
|  | +  //      // Cast the input vectors to byte vectors. | 
|  | +  //      Value *Op0 = Builder->CreateBitCast(II->getArgOperand(0), | 
|  | +  //                                          Mask->getType()); | 
|  | +  //      Value *Op1 = Builder->CreateBitCast(II->getArgOperand(1), | 
|  | +  //                                          Mask->getType()); | 
|  | +  //      Value *Result = UndefValue::get(Op0->getType()); | 
|  | +  // | 
|  | +  //      // Only extract each element once. | 
|  | +  //      Value *ExtractedElts[32]; | 
|  | +  //      memset(ExtractedElts, 0, sizeof(ExtractedElts)); | 
|  | +  // | 
|  | +  //      for (unsigned i = 0; i != 16; ++i) { | 
|  | +  //        if (isa<UndefValue>(Mask->getOperand(i))) | 
|  | +  //          continue; | 
|  | +  //        unsigned Idx=cast<ConstantInt>(Mask->getOperand(i))->getZExtValue(); | 
|  | +  //        Idx &= 31;  // Match the hardware behavior. | 
|  | +  // | 
|  | +  //        if (ExtractedElts[Idx] == 0) { | 
|  | +  //          ExtractedElts[Idx] = | 
|  | +  //            Builder->CreateExtractElement(Idx < 16 ? Op0 : Op1, | 
|  | +  //                                          Builder->getInt32(Idx&15)); | 
|  | +  //        } | 
|  | +  // | 
|  | +  //        // Insert this value into the result vector. | 
|  | +  //        Result = Builder->CreateInsertElement(Result, ExtractedElts[Idx], | 
|  | +  //                                              Builder->getInt32(i)); | 
|  | +  //      } | 
|  | +  //      return CastInst::Create(Instruction::BitCast, Result, CI.getType()); | 
|  | +  //    } | 
|  | +  //  } | 
|  | +  //  break; | 
|  |  | 
|  | -  case Intrinsic::arm_neon_vld1: | 
|  | -  case Intrinsic::arm_neon_vld2: | 
|  | -  case Intrinsic::arm_neon_vld3: | 
|  | -  case Intrinsic::arm_neon_vld4: | 
|  | -  case Intrinsic::arm_neon_vld2lane: | 
|  | -  case Intrinsic::arm_neon_vld3lane: | 
|  | -  case Intrinsic::arm_neon_vld4lane: | 
|  | -  case Intrinsic::arm_neon_vst1: | 
|  | -  case Intrinsic::arm_neon_vst2: | 
|  | -  case Intrinsic::arm_neon_vst3: | 
|  | -  case Intrinsic::arm_neon_vst4: | 
|  | -  case Intrinsic::arm_neon_vst2lane: | 
|  | -  case Intrinsic::arm_neon_vst3lane: | 
|  | -  case Intrinsic::arm_neon_vst4lane: { | 
|  | -    unsigned MemAlign = getKnownAlignment(II->getArgOperand(0), TD); | 
|  | -    unsigned AlignArg = II->getNumArgOperands() - 1; | 
|  | -    ConstantInt *IntrAlign = dyn_cast<ConstantInt>(II->getArgOperand(AlignArg)); | 
|  | -    if (IntrAlign && IntrAlign->getZExtValue() < MemAlign) { | 
|  | -      II->setArgOperand(AlignArg, | 
|  | -                        ConstantInt::get(Type::getInt32Ty(II->getContext()), | 
|  | -                                         MemAlign, false)); | 
|  | -      return II; | 
|  | -    } | 
|  | -    break; | 
|  | -  } | 
|  | +  //case Intrinsic::arm_neon_vld1: | 
|  | +  //case Intrinsic::arm_neon_vld2: | 
|  | +  //case Intrinsic::arm_neon_vld3: | 
|  | +  //case Intrinsic::arm_neon_vld4: | 
|  | +  //case Intrinsic::arm_neon_vld2lane: | 
|  | +  //case Intrinsic::arm_neon_vld3lane: | 
|  | +  //case Intrinsic::arm_neon_vld4lane: | 
|  | +  //case Intrinsic::arm_neon_vst1: | 
|  | +  //case Intrinsic::arm_neon_vst2: | 
|  | +  //case Intrinsic::arm_neon_vst3: | 
|  | +  //case Intrinsic::arm_neon_vst4: | 
|  | +  //case Intrinsic::arm_neon_vst2lane: | 
|  | +  //case Intrinsic::arm_neon_vst3lane: | 
|  | +  //case Intrinsic::arm_neon_vst4lane: { | 
|  | +  //  unsigned MemAlign = getKnownAlignment(II->getArgOperand(0), TD); | 
|  | +  //  unsigned AlignArg = II->getNumArgOperands() - 1; | 
|  | +  //  ConstantInt *IntrAlign = dyn_cast<ConstantInt>(II->getArgOperand(AlignArg)); | 
|  | +  //  if (IntrAlign && IntrAlign->getZExtValue() < MemAlign) { | 
|  | +  //    II->setArgOperand(AlignArg, | 
|  | +  //                      ConstantInt::get(Type::getInt32Ty(II->getContext()), | 
|  | +  //                                       MemAlign, false)); | 
|  | +  //    return II; | 
|  | +  //  } | 
|  | +  //  break; | 
|  | +  //} | 
|  |  | 
|  | case Intrinsic::stackrestore: { | 
|  | // If the save is right next to the restore, remove the restore.  This can |