OLD | NEW |
1 //===- LoopStrengthReduce.cpp - Strength Reduce IVs in Loops --------------===// | 1 //===- LoopStrengthReduce.cpp - Strength Reduce IVs in Loops --------------===// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // This transformation analyzes and transforms the induction variables (and | 10 // This transformation analyzes and transforms the induction variables (and |
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
574 bool isAddress = isa<LoadInst>(Inst); | 574 bool isAddress = isa<LoadInst>(Inst); |
575 if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) { | 575 if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) { |
576 if (SI->getOperand(1) == OperandVal) | 576 if (SI->getOperand(1) == OperandVal) |
577 isAddress = true; | 577 isAddress = true; |
578 } else if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst)) { | 578 } else if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst)) { |
579 // Addressing modes can also be folded into prefetches and a variety | 579 // Addressing modes can also be folded into prefetches and a variety |
580 // of intrinsics. | 580 // of intrinsics. |
581 switch (II->getIntrinsicID()) { | 581 switch (II->getIntrinsicID()) { |
582 default: break; | 582 default: break; |
583 case Intrinsic::prefetch: | 583 case Intrinsic::prefetch: |
| 584 #if defined(TARGET_ENABLED_X86) |
584 case Intrinsic::x86_sse_storeu_ps: | 585 case Intrinsic::x86_sse_storeu_ps: |
585 case Intrinsic::x86_sse2_storeu_pd: | 586 case Intrinsic::x86_sse2_storeu_pd: |
586 case Intrinsic::x86_sse2_storeu_dq: | 587 case Intrinsic::x86_sse2_storeu_dq: |
587 case Intrinsic::x86_sse2_storel_dq: | 588 case Intrinsic::x86_sse2_storel_dq: |
| 589 #endif // TARGET_ENABLED_X86 |
588 if (II->getArgOperand(0) == OperandVal) | 590 if (II->getArgOperand(0) == OperandVal) |
589 isAddress = true; | 591 isAddress = true; |
590 break; | 592 break; |
591 } | 593 } |
592 } | 594 } |
593 return isAddress; | 595 return isAddress; |
594 } | 596 } |
595 | 597 |
596 /// getAccessType - Return the type of the memory being accessed. | 598 /// getAccessType - Return the type of the memory being accessed. |
597 static Type *getAccessType(const Instruction *Inst) { | 599 static Type *getAccessType(const Instruction *Inst) { |
598 Type *AccessTy = Inst->getType(); | 600 Type *AccessTy = Inst->getType(); |
599 if (const StoreInst *SI = dyn_cast<StoreInst>(Inst)) | 601 if (const StoreInst *SI = dyn_cast<StoreInst>(Inst)) |
600 AccessTy = SI->getOperand(0)->getType(); | 602 AccessTy = SI->getOperand(0)->getType(); |
601 else if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst)) { | 603 else if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst)) { |
602 // Addressing modes can also be folded into prefetches and a variety | 604 // Addressing modes can also be folded into prefetches and a variety |
603 // of intrinsics. | 605 // of intrinsics. |
604 switch (II->getIntrinsicID()) { | 606 switch (II->getIntrinsicID()) { |
605 default: break; | 607 default: break; |
| 608 #if defined(TARGET_ENABLED_X86) |
606 case Intrinsic::x86_sse_storeu_ps: | 609 case Intrinsic::x86_sse_storeu_ps: |
607 case Intrinsic::x86_sse2_storeu_pd: | 610 case Intrinsic::x86_sse2_storeu_pd: |
608 case Intrinsic::x86_sse2_storeu_dq: | 611 case Intrinsic::x86_sse2_storeu_dq: |
609 case Intrinsic::x86_sse2_storel_dq: | 612 case Intrinsic::x86_sse2_storel_dq: |
610 AccessTy = II->getArgOperand(0)->getType(); | 613 AccessTy = II->getArgOperand(0)->getType(); |
611 break; | 614 break; |
| 615 #endif // TARGET_ENABLED_X86 |
612 } | 616 } |
613 } | 617 } |
614 | 618 |
615 // All pointers have the same requirements, so canonicalize them to an | 619 // All pointers have the same requirements, so canonicalize them to an |
616 // arbitrary pointer type to minimize variation. | 620 // arbitrary pointer type to minimize variation. |
617 if (PointerType *PTy = dyn_cast<PointerType>(AccessTy)) | 621 if (PointerType *PTy = dyn_cast<PointerType>(AccessTy)) |
618 AccessTy = PointerType::get(IntegerType::get(PTy->getContext(), 1), | 622 AccessTy = PointerType::get(IntegerType::get(PTy->getContext(), 1), |
619 PTy->getAddressSpace()); | 623 PTy->getAddressSpace()); |
620 | 624 |
621 return AccessTy; | 625 return AccessTy; |
(...skipping 3301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3923 | 3927 |
3924 // Run the main LSR transformation. | 3928 // Run the main LSR transformation. |
3925 Changed |= LSRInstance(TLI, L, this).getChanged(); | 3929 Changed |= LSRInstance(TLI, L, this).getChanged(); |
3926 | 3930 |
3927 // At this point, it is worth checking to see if any recurrence PHIs are also | 3931 // At this point, it is worth checking to see if any recurrence PHIs are also |
3928 // dead, so that we can remove them as well. | 3932 // dead, so that we can remove them as well. |
3929 Changed |= DeleteDeadPHIs(L->getHeader()); | 3933 Changed |= DeleteDeadPHIs(L->getHeader()); |
3930 | 3934 |
3931 return Changed; | 3935 return Changed; |
3932 } | 3936 } |
OLD | NEW |