Nikita Popov f59209a86e [AsmParser] Unify parsing of attributes
Continuing on from D105780, this should be the last major bit of
attribute cleanup. Currently, LLParser implements attribute parsing
for functions, parameters and returns separately, enumerating all
supported (and unsupported) attributes each time. This patch
extracts the common parsing logic, and performs a check afterwards
whether the attribute is valid in the given position. Parameters
and returns are handled together, while function attributes need
slightly different logic to support attribute groups.

Differential Revision: https://reviews.llvm.org/D105938
2021-07-15 17:51:11 +02:00

41 lines
1.6 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt %s -passes=loop-deletion -S | FileCheck %s --check-prefixes=CHECK
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%class.Loc.95 = type { %class.Domain.96 }
%class.Domain.96 = type { %class.DomainBase.97 }
%class.DomainBase.97 = type { [3 x %struct.WrapNoInit] }
%struct.WrapNoInit = type { %class.Loc }
%class.Loc = type { %class.Domain.67 }
%class.Domain.67 = type { %class.DomainBase.68 }
%class.DomainBase.68 = type { i32 }
define dso_local void @_ZSt8_DestroyIP3LocILi3EES1_EvT_S3_RSaIT0_E(%class.Loc.95* %0) #0 {
; CHECK-LABEL: @_ZSt8_DestroyIP3LocILi3EES1_EvT_S3_RSaIT0_E(
; CHECK-NEXT: br label [[_ZST8_DESTROYIP3LOCILI3EEEVT_S3__EXIT:%.*]]
; CHECK: _ZSt8_DestroyIP3LocILi3EEEvT_S3_.exit:
; CHECK-NEXT: ret void
;
br label %2
2: ; preds = %4, %1
%.0.i.i = phi %class.Loc.95* [ undef, %1 ], [ %5, %4 ]
%3 = icmp ne %class.Loc.95* %.0.i.i, %0
br i1 %3, label %4, label %_ZSt8_DestroyIP3LocILi3EEEvT_S3_.exit
4: ; preds = %2
call void @llvm.assume(i1 true) [ "align"(%class.Loc.95* %.0.i.i, i64 4) ]
%5 = getelementptr inbounds %class.Loc.95, %class.Loc.95* %.0.i.i, i32 1
br label %2
_ZSt8_DestroyIP3LocILi3EEEvT_S3_.exit: ; preds = %2
ret void
}
declare void @llvm.assume(i1) #1
attributes #0 = { "target-cpu"="x86-64" }
attributes #1 = { willreturn readnone norecurse nofree }