Home | History | Annotate | Download | only in Scalar

Lines Matching refs:AM

226   /// AM - This is used to represent complex addressing, as well as other kinds
228 TargetLowering::AddrMode AM;
231 /// non-empty, AM.HasBaseReg should be set to true.
235 /// when AM.Scale is not zero.
329 AM.HasBaseReg = true;
335 AM.HasBaseReg = true;
351 AM.BaseGV ? AM.BaseGV->getType() :
384 if (AM.BaseGV) {
386 WriteAsOperand(OS, AM.BaseGV, /*PrintType=*/false);
388 if (AM.BaseOffs != 0) {
390 OS << AM.BaseOffs;
397 if (AM.HasBaseReg && BaseRegs.empty()) {
400 } else if (!AM.HasBaseReg && !BaseRegs.empty()) {
404 if (AM.Scale != 0) {
406 OS << AM.Scale << "*reg(";
929 int64_t Offset = (uint64_t)*I + F.AM.BaseOffs;
930 if (F.AM.BaseGV)
1269 /// isLegalUse - Test whether the use described by AM is "legal", meaning it can
1272 static bool isLegalUse(const TargetLowering::AddrMode &AM,
1279 if (TLI) return TLI->isLegalAddressingMode(AM, AccessTy);
1282 return !AM.BaseGV && AM.BaseOffs == 0 && AM.Scale <= 1;
1287 if (AM.BaseGV)
1291 if (AM.Scale != 0 && AM.HasBaseReg && AM.BaseOffs != 0)
1296 if (AM.Scale != 0 && AM.Scale != -1)
1301 if (AM.BaseOffs != 0) {
1308 int64_t Offs = AM.BaseOffs;
1309 if (AM.Scale == 0)
1319 return !AM.BaseGV && AM.Scale == 0 && AM.BaseOffs == 0;
1323 return !AM.BaseGV && (AM.Scale == 0 || AM.Scale == -1) && AM.BaseOffs == 0;
1329 static bool isLegalUse(TargetLowering::AddrMode AM,
1334 if (((int64_t)((uint64_t)AM.BaseOffs + MinOffset) > AM.BaseOffs) !=
1337 AM.BaseOffs = (uint64_t)AM.BaseOffs + MinOffset;
1338 if (isLegalUse(AM, Kind, AccessTy, TLI)) {
1339 AM.BaseOffs = (uint64_t)AM.BaseOffs - MinOffset;
1341 if (((int64_t)((uint64_t)AM.BaseOffs + MaxOffset) > AM.BaseOffs) !=
1344 AM.BaseOffs = (uint64_t)AM.BaseOffs + MaxOffset;
1345 return isLegalUse(AM, Kind, AccessTy, TLI);
1360 TargetLowering::AddrMode AM;
1361 AM.BaseOffs = BaseOffs;
1362 AM.BaseGV = BaseGV;
1363 AM.HasBaseReg = HasBaseReg;
1364 AM.Scale = Kind == LSRUse::ICmpZero ? -1 : 1;
1368 if (!AM.HasBaseReg && AM.Scale == 1) {
1369 AM.Scale = 0;
1370 AM.HasBaseReg = true;
1373 return isLegalUse(AM, Kind, AccessTy, TLI);
1398 TargetLowering::AddrMode AM;
1399 AM.BaseOffs = BaseOffs;
1400 AM.BaseGV = BaseGV;
1401 AM.HasBaseReg = HasBaseReg;
1402 AM.Scale = Kind == LSRUse::ICmpZero ? -1 : 1;
1404 return isLegalUse(AM, MinOffset, MaxOffset, Kind, AccessTy, TLI);
2023 TargetLowering::AddrMode AM;
2024 AM.Scale = C->getSExtValue();
2025 if (TLI->isLegalAddressingMode(AM, AccessTy))
2027 AM.Scale = -AM.Scale;
2028 if (TLI->isLegalAddressingMode(AM, AccessTy))
2201 F.AM.BaseGV == OrigF.AM.BaseGV &&
2202 F.AM.Scale == OrigF.AM.Scale &&
2204 if (F.AM.BaseOffs == 0)
2906 F.AM.HasBaseReg = true;
3197 if (Base.AM.BaseGV) return;
3205 F.AM.BaseGV = GV;
3206 if (!isLegalUse(F.AM, LU.MinOffset, LU.MaxOffset,
3230 F.AM.BaseOffs = (uint64_t)Base.AM.BaseOffs - *I;
3231 if (isLegalUse(F.AM, LU.MinOffset - *I, LU.MaxOffset - *I,
3250 F.AM.BaseOffs = (uint64_t)F.AM.BaseOffs + Imm;
3251 if (!isLegalUse(F.AM, LU.MinOffset, LU.MaxOffset,
3273 assert(!Base.AM.BaseGV && "ICmpZero use is not legal!");
3281 if (Base.AM.BaseOffs == INT64_MIN && Factor == -1)
3283 int64_t NewBaseOffs = (uint64_t)Base.AM.BaseOffs * Factor;
3284 if (NewBaseOffs / Factor != Base.AM.BaseOffs)
3296 F.AM.BaseOffs = NewBaseOffs;
3299 if (!isLegalUse(F.AM, Offset, Offset, LU.Kind, LU.AccessTy, TLI))
3303 F.AM.BaseOffs = (uint64_t)F.AM.BaseOffs + Offset - LU.MinOffset;
3344 if (Base.AM.Scale != 0) return;
3351 Base.AM.Scale = Factor;
3352 Base.AM.HasBaseReg = Base.BaseRegs.size() > 1;
3354 if (!isLegalUse(Base.AM, LU.MinOffset, LU.MaxOffset,
3359 isLegalUse(Base.AM, LU.MinOffset, LU.MaxOffset,
3369 !Base.AM.HasBaseReg && Base.AM.BaseOffs == 0 && !Base.AM.BaseGV)
3397 if (Base.AM.BaseGV) return;
3554 int64_t Offs = (uint64_t)F.AM.BaseOffs +
3555 Imm * (uint64_t)F.AM.Scale;
3561 NewF.AM.BaseOffs = Offs;
3562 if (!isLegalUse(NewF.AM, LU.MinOffset, LU.MaxOffset,
3572 (NewF.AM.BaseOffs < 0) &&
3573 (C->getValue()->getValue().abs() * APInt(BitWidth, F.AM.Scale))
3574 .ule(abs64(NewF.AM.BaseOffs)))
3586 NewF.AM.BaseOffs = (uint64_t)NewF.AM.BaseOffs + Imm;
3587 if (!isLegalUse(NewF.AM, LU.MinOffset, LU.MaxOffset,
3604 if ((C->getValue()->getValue() + NewF.AM.BaseOffs).abs().slt(
3605 abs64(NewF.AM.BaseOffs)) &&
3607 NewF.AM.BaseOffs).countTrailingZeros() >=
3608 CountTrailingZeros_64(NewF.AM.BaseOffs))
3806 NewF.AM.BaseOffs += C->getValue()->getSExtValue();
3819 if (!F.AM.BaseGV) {
3821 NewF.AM.BaseGV = GV;
3864 if (F.AM.BaseOffs != 0 && F.AM.Scale == 0) {
3866 if (reconcileNewOffset(*LUThatHas, F.AM.BaseOffs,
3880 Fixup.Offset += F.AM.BaseOffs;
3900 if (!isLegalUse(F.AM,
4310 if (F.AM.Scale != 0) {
4323 assert(F.AM.Scale == -1 &&
4338 SE.getConstant(ScaledS->getType(), F.AM.Scale));
4344 if (F.AM.BaseGV) {
4351 Ops.push_back(SE.getUnknown(F.AM.BaseGV));
4363 int64_t Offset = (uint64_t)F.AM.BaseOffs + LF.Offset;
4404 assert(!F.AM.BaseGV && "ICmp does not support folding a global value and "
4406 if (F.AM.Scale == -1) {
4416 assert(F.AM.Scale == 0 &&
4681 assert(isLegalUse(J->AM, LU.MinOffset, LU.MaxOffset,