Lines Matching full:attrs
36 MDNode *LoopInfo::createPipeliningMetadata(const LoopAttributes &Attrs,
42 if (Attrs.PipelineDisabled)
44 else if (Attrs.PipelineInitiationInterval != 0)
64 if (Attrs.PipelineInitiationInterval > 0) {
68 llvm::Type::getInt32Ty(Ctx), Attrs.PipelineInitiationInterval))};
81 LoopInfo::createPartialUnrollMetadata(const LoopAttributes &Attrs,
87 if (Attrs.UnrollEnable == LoopAttributes::Disable)
89 else if (Attrs.UnrollEnable == LoopAttributes::Full)
91 else if (Attrs.UnrollEnable != LoopAttributes::Unspecified ||
92 Attrs.UnrollCount != 0)
98 return createPipeliningMetadata(Attrs, LoopProperties, HasUserTransforms);
111 MDNode *Followup = createPipeliningMetadata(Attrs, FollowupLoopProperties,
119 if (Attrs.UnrollCount > 0) {
122 llvm::Type::getInt32Ty(Ctx), Attrs.UnrollCount))};
127 if (Attrs.UnrollEnable == LoopAttributes::Enable) {
143 LoopInfo::createUnrollAndJamMetadata(const LoopAttributes &Attrs,
149 if (Attrs.UnrollAndJamEnable == LoopAttributes::Disable)
151 else if (Attrs.UnrollAndJamEnable == LoopAttributes::Enable ||
152 Attrs.UnrollAndJamCount != 0)
163 return createPartialUnrollMetadata(Attrs, LoopProperties,
173 MDNode *Followup = createPartialUnrollMetadata(Attrs, FollowupLoopProperties,
181 if (Attrs.UnrollAndJamCount > 0) {
185 Attrs.UnrollAndJamCount))};
189 if (Attrs.UnrollAndJamEnable == LoopAttributes::Enable) {
211 LoopInfo::createLoopVectorizeMetadata(const LoopAttributes &Attrs,
217 if (Attrs.VectorizeEnable == LoopAttributes::Disable)
219 else if (Attrs.VectorizeEnable != LoopAttributes::Unspecified ||
220 Attrs.VectorizePredicateEnable != LoopAttributes::Unspecified ||
221 Attrs.InterleaveCount != 0 || Attrs.VectorizeWidth != 0 ||
222 Attrs.VectorizeScalable != LoopAttributes::Unspecified)
235 return createUnrollAndJamMetadata(Attrs, LoopProperties, HasUserTransforms);
247 MDNode *Followup = createUnrollAndJamMetadata(Attrs, FollowupLoopProperties,
257 if (Attrs.VectorizePredicateEnable != LoopAttributes::Unspecified) {
259 (Attrs.VectorizePredicateEnable == LoopAttributes::Enable);
269 if (Attrs.VectorizeWidth > 0) {
273 Attrs.VectorizeWidth))};
278 if (Attrs.VectorizeScalable != LoopAttributes::Unspecified) {
279 bool IsScalable = Attrs.VectorizeScalable == LoopAttributes::Enable;
288 if (Attrs.InterleaveCount > 0) {
292 Attrs.InterleaveCount))};
304 if (Attrs.VectorizeEnable != LoopAttributes::Unspecified ||
305 (IsVectorPredicateEnabled && Attrs.VectorizeWidth != 1) ||
306 Attrs.VectorizeWidth > 1 ||
307 Attrs.VectorizeScalable == LoopAttributes::Enable ||
308 (Attrs.VectorizeScalable == LoopAttributes::Disable &&
309 Attrs.VectorizeWidth != 1)) {
310 bool AttrVal = Attrs.VectorizeEnable != LoopAttributes::Disable;
329 LoopInfo::createLoopDistributeMetadata(const LoopAttributes &Attrs,
335 if (Attrs.DistributeEnable == LoopAttributes::Disable)
337 if (Attrs.DistributeEnable == LoopAttributes::Enable)
350 return createLoopVectorizeMetadata(Attrs, LoopProperties,
356 createLoopVectorizeMetadata(Attrs, LoopProperties, FollowupHasTransforms);
365 (Attrs.DistributeEnable == LoopAttributes::Enable)))};
379 MDNode *LoopInfo::createFullUnrollMetadata(const LoopAttributes &Attrs,
385 if (Attrs.UnrollEnable == LoopAttributes::Disable)
387 else if (Attrs.UnrollEnable == LoopAttributes::Full)
398 return createLoopDistributeMetadata(Attrs, LoopProperties,
417 const LoopAttributes &Attrs,
432 if (Attrs.MustProgress)
436 assert(!!AccGroup == Attrs.IsParallel &&
438 if (Attrs.IsParallel) {
444 if (Attrs.CodeAlign > 0) {
447 llvm::Type::getInt32Ty(Ctx), Attrs.CodeAlign))};
453 return createFullUnrollMetadata(Attrs, LoopProperties, HasUserTransforms);
484 LoopInfo::LoopInfo(BasicBlock *Header, const LoopAttributes &Attrs,
487 : Header(Header), Attrs(Attrs), StartLoc(StartLoc), EndLoc(EndLoc),
490 if (Attrs.IsParallel) {
496 if (!Attrs.IsParallel && Attrs.VectorizeWidth == 0 &&
497 Attrs.VectorizeScalable == LoopAttributes::Unspecified &&
498 Attrs.InterleaveCount == 0 && Attrs.UnrollCount == 0 &&
499 Attrs.UnrollAndJamCount == 0 && !Attrs.PipelineDisabled &&
500 Attrs.PipelineInitiationInterval == 0 &&
501 Attrs.VectorizePredicateEnable == LoopAttributes::Unspecified &&
502 Attrs.VectorizeEnable == LoopAttributes::Unspecified &&
503 Attrs.UnrollEnable == LoopAttributes::Unspecified &&
504 Attrs.UnrollAndJamEnable == LoopAttributes::Unspecified &&
505 Attrs.DistributeEnable == LoopAttributes::Unspecified &&
506 Attrs.CodeAlign == 0 && !StartLoc && !EndLoc && !Attrs.MustProgress)
519 LoopAttributes CurLoopAttr = Attrs;
522 if (Parent && (Parent->Attrs.UnrollAndJamEnable ||
523 Parent->Attrs.UnrollAndJamCount != 0)) {
530 BeforeJam.IsParallel = AfterJam.IsParallel = Attrs.IsParallel;
532 BeforeJam.VectorizeWidth = Attrs.VectorizeWidth;
533 BeforeJam.VectorizeScalable = Attrs.VectorizeScalable;
534 BeforeJam.InterleaveCount = Attrs.InterleaveCount;
535 BeforeJam.VectorizeEnable = Attrs.VectorizeEnable;
536 BeforeJam.DistributeEnable = Attrs.DistributeEnable;
537 BeforeJam.VectorizePredicateEnable = Attrs.VectorizePredicateEnable;
539 switch (Attrs.UnrollEnable) {
542 BeforeJam.UnrollEnable = Attrs.UnrollEnable;
543 AfterJam.UnrollEnable = Attrs.UnrollEnable;
553 AfterJam.VectorizePredicateEnable = Attrs.VectorizePredicateEnable;
554 AfterJam.UnrollCount = Attrs.UnrollCount;
555 AfterJam.PipelineDisabled = Attrs.PipelineDisabled;
556 AfterJam.PipelineInitiationInterval = Attrs.PipelineInitiationInterval;
563 BeforeJam.UnrollAndJamCount = Attrs.UnrollAndJamCount;
564 BeforeJam.UnrollAndJamEnable = Attrs.UnrollAndJamEnable;
607 ArrayRef<const clang::Attr *> Attrs,
610 // Identify loop hint attributes from Attrs.
611 for (const auto *Attr : Attrs) {
811 // Identify loop attribute 'code_align' from Attrs.
814 if (const auto *CodeAlign = getSpecificAttr<CodeAlignAttr>(Attrs)) {