Upstreaming Progress
The current upstreaming process involves migrating ClangIR from its incubator repository into the main LLVM project, ensuring it meets LLVM's coding standards and quality expectations. This page tracks the progress of upstreaming
Operations
TODO: This section is under development.
Overall Progress: 23%
View Operations
- ❌ cir.acos (::cir::ACosOp)
- ❌ cir.asin (::cir::ASinOp)
- ❌ cir.atan (::cir::ATanOp)
- ❌ cir.abs (::cir::AbsOp)
- ❌ cir.alloc.exception (::cir::AllocExceptionOp)
- ✅ cir.alloca (::cir::AllocaOp)
- ❌ cir.array.ctor (::cir::ArrayCtor)
- ❌ cir.array.dtor (::cir::ArrayDtor)
- ❌ cir.assume.aligned (::cir::AssumeAlignedOp)
- ❌ cir.assume (::cir::AssumeOp)
- ❌ cir.assume.separate_storage (::cir::AssumeSepStorageOp)
- ❌ cir.atomic.cmp_xchg (::cir::AtomicCmpXchg)
- ❌ cir.atomic.fence (::cir::AtomicFence)
- ❌ cir.atomic.fetch (::cir::AtomicFetch)
- ❌ cir.atomic.xchg (::cir::AtomicXchg)
- ❌ cir.await (::cir::AwaitOp)
- ❌ cir.base_class_addr (::cir::BaseClassAddrOp)
- ❌ cir.base_data_member (::cir::BaseDataMemberOp)
- ❌ cir.base_method (::cir::BaseMethodOp)
- ✅ cir.binop (::cir::BinOp)
- ❌ cir.binop.overflow (::cir::BinOpOverflowOp)
- ❌ cir.bit.clrsb (::cir::BitClrsbOp)
- ❌ cir.bit.clz (::cir::BitClzOp)
- ❌ cir.bit.ctz (::cir::BitCtzOp)
- ❌ cir.bit.ffs (::cir::BitFfsOp)
- ❌ cir.bit.parity (::cir::BitParityOp)
- ❌ cir.bit.popcount (::cir::BitPopcountOp)
- ❌ cir.bit_reverse (::cir::BitReverseOp)
- ✅ cir.brcond (::cir::BrCondOp)
- ✅ cir.br (::cir::BrOp)
- ✅ cir.break (::cir::BreakOp)
- ❌ cir.bswap (::cir::ByteswapOp)
- ❌ cir.asm (::cir::InlineAsmOp)
- ✅ cir.call (::cir::CallOp)
- ❌ cir.case (::cir::CaseOp)
- ✅ cir.cast (::cir::CastOp)
- ❌ cir.catch_param (::cir::CatchParamOp)
- ❌ cir.ceil (::cir::CeilOp)
- ❌ cir.clear_cache (::cir::ClearCacheOp)
- ❌ cir.cmp (::cir::CmpOp)
- ❌ cir.cmp3way (::cir::CmpThreeWayOp)
- ❌ cir.complex.binop (::cir::ComplexBinOp)
- ❌ cir.complex.create (::cir::ComplexCreateOp)
- ❌ cir.complex.imag (::cir::ComplexImagOp)
- ❌ cir.complex.imag_ptr (::cir::ComplexImagPtrOp)
- ❌ cir.complex.real (::cir::ComplexRealOp)
- ❌ cir.complex.real_ptr (::cir::ComplexRealPtrOp)
- ✅ cir.condition (::cir::ConditionOp)
- ✅ cir.const (::cir::ConstantOp)
- ✅ cir.continue (::cir::ContinueOp)
- ❌ cir.copy (::cir::CopyOp)
- ❌ cir.copysign (::cir::CopysignOp)
- ❌ cir.cos (::cir::CosOp)
- ❌ cir.delete.array (::cir::DeleteArrayOp)
- ❌ cir.derived_class_addr (::cir::DerivedClassAddrOp)
- ❌ cir.derived_data_member (::cir::DerivedDataMemberOp)
- ❌ cir.derived_method (::cir::DerivedMethodOp)
- ✅ cir.do (::cir::DoWhileOp)
- ❌ cir.dyn_cast (::cir::DynamicCastOp)
- ❌ cir.eh.inflight_exception (::cir::EhInflightOp)
- ❌ cir.eh.typeid (::cir::EhTypeIdOp)
- ❌ cir.exp2 (::cir::Exp2Op)
- ❌ cir.exp (::cir::ExpOp)
- ❌ cir.expect (::cir::ExpectOp)
- ❌ cir.extract_member (::cir::ExtractMemberOp)
- ❌ cir.fabs (::cir::FAbsOp)
- ❌ cir.fmaxnum (::cir::FMaxNumOp)
- ❌ cir.fmaximum (::cir::FMaximumOp)
- ❌ cir.fminnum (::cir::FMinNumOp)
- ❌ cir.fminimum (::cir::FMinimumOp)
- ❌ cir.fmod (::cir::FModOp)
- ❌ cir.floor (::cir::FloorOp)
- ✅ cir.for (::cir::ForOp)
- ❌ cir.frame_address (::cir::FrameAddrOp)
- ❌ cir.free.exception (::cir::FreeExceptionOp)
- ✅ cir.func (::cir::FuncOp)
- ❌ cir.get_bitfield (::cir::GetBitfieldOp)
- ✅ cir.get_global (::cir::GetGlobalOp)
- ✅ cir.get_member (::cir::GetMemberOp)
- ❌ cir.get_method (::cir::GetMethodOp)
- ❌ cir.get_runtime_member (::cir::GetRuntimeMemberOp)
- ✅ cir.global (::cir::GlobalOp)
- ❌ cir.goto (::cir::GotoOp)
- ✅ cir.if (::cir::IfOp)
- ❌ cir.insert_member (::cir::InsertMemberOp)
- ❌ cir.invariant_group (::cir::InvariantGroupOp)
- ❌ cir.is_constant (::cir::IsConstantOp)
- ❌ cir.is_fp_class (::cir::IsFPClassOp)
- ❌ cir.std.begin (::cir::IterBeginOp)
- ❌ cir.std.end (::cir::IterEndOp)
- ❌ cir.llvm.intrinsic (::cir::LLVMIntrinsicCallOp)
- ❌ cir.llrint (::cir::LLrintOp)
- ❌ cir.llround (::cir::LLroundOp)
- ❌ cir.label (::cir::LabelOp)
- ❌ cir.linker_options (::cir::LinkerOptionsOp)
- ❌ cir.log10 (::cir::Log10Op)
- ❌ cir.log2 (::cir::Log2Op)
- ❌ cir.log (::cir::LogOp)
- ✅ cir.load (::cir::Load)
- ❌ cir.lrint (::cir::LrintOp)
- ❌ cir.lround (::cir::LroundOp)
- ❌ cir.libc.memchr (::cir::MemChrOp)
- ❌ cir.memcpy_inline (::cir::MemCpyInlineOp)
- ❌ cir.libc.memcpy (::cir::MemCpyOp)
- ❌ cir.libc.memmove (::cir::MemMoveOp)
- ❌ cir.memset_inline (::cir::MemSetInlineOp)
- ❌ cir.libc.memset (::cir::MemSetOp)
- ❌ cir.nearbyint (::cir::NearbyintOp)
- ❌ cir.objsize (::cir::ObjSizeOp)
- ❌ cir.pow (::cir::PowOp)
- ❌ cir.prefetch (::cir::PrefetchOp)
- ❌ cir.ptr_diff (::cir::PtrDiffOp)
- ❌ cir.ptr_mask (::cir::PtrMaskOp)
- ✅ cir.ptr_stride (::cir::PtrStrideOp)
- ❌ cir.resume (::cir::ResumeOp)
- ✅ cir.return (::cir::ReturnOp)
- ❌ cir.rint (::cir::RintOp)
- ❌ cir.rotate (::cir::RotateOp)
- ❌ cir.roundeven (::cir::RoundEvenOp)
- ❌ cir.round (::cir::RoundOp)
- ✅ cir.scope (::cir::ScopeOp)
- ✅ cir.select (::cir::SelectOp)
- ❌ cir.set_bitfield (::cir::SetBitfieldOp)
- ✅ cir.shift (::cir::ShiftOp)
- ❌ cir.signbit (::cir::SignBitOp)
- ❌ cir.sin (::cir::SinOp)
- ❌ cir.sqrt (::cir::SqrtOp)
- ✅ cir.stack_restore (::cir::StackRestoreOp)
- ✅ cir.stack_save (::cir::StackSaveOp)
- ❌ cir.std.find (::cir::StdFindOp)
- ✅ cir.store (::cir::StoreOp)
- ❌ cir.switch.flat (::cir::SwitchFlatOp)
- ✅ cir.switch (::cir::SwitchOp)
- ❌ cir.tan (::cir::TanOp)
- ✅ cir.ternary (::cir::TernaryOp)
- ❌ cir.throw (::cir::ThrowOp)
- ✅ cir.trap (::cir::TrapOp)
- ❌ cir.trunc (::cir::TruncOp)
- ❌ cir.try_call (::cir::TryCallOp)
- ❌ cir.try (::cir::TryOp)
- ✅ cir.unary (::cir::UnaryOp)
- ✅ cir.unreachable (::cir::UnreachableOp)
- ❌ cir.va.arg (::cir::VAArgOp)
- ❌ cir.va.copy (::cir::VACopyOp)
- ❌ cir.va.end (::cir::VAEndOp)
- ❌ cir.va.start (::cir::VAStartOp)
- ❌ cir.vtt.address_point (::cir::VTTAddrPointOp)
- ❌ cir.vtable.address_point (::cir::VTableAddrPointOp)
- ✅ cir.vec.cmp (::cir::VecCmpOp)
- ✅ cir.vec.create (::cir::VecCreateOp)
- ✅ cir.vec.extract (::cir::VecExtractOp)
- ✅ cir.vec.insert (::cir::VecInsertOp)
- ❌ cir.vec.shuffle.dynamic (::cir::VecShuffleDynamicOp)
- ❌ cir.vec.shuffle (::cir::VecShuffleOp)
- ❌ cir.vec.splat (::cir::VecSplatOp)
- ❌ cir.vec.ternary (::cir::VecTernaryOp)
- ✅ cir.while (::cir::WhileOp)
- ✅ cir.yield (::cir::YieldOp)
Types
TODO: This section is under development.
Overall Progress: 5%
View Types
- ❌ ArrayType
- ❌ BF16Type
- ✅ BoolType
- ❌ ComplexType
- ❌ DataMemberType
- ❌ DoubleType
- ❌ ExceptionInfoType
- ❌ FP16Type
- ❌ FP80Type
- ❌ FP128Type
- ❌ FuncType
- ❌ IntType
- ❌ LongDoubleType
- ❌ MethodType
- ❌ PointerType
- ❌ RecordType
- ❌ SingleType
- ❌ VectorType
- ❌ VoidType
Attributes
TODO: This section is under development.
Overall Progress: 0%
View Attributes
- ❌ ASTCXXConstructorDeclAttr
- ❌ ASTCXXConversionDeclAttr
- ❌ ASTCXXDestructorDeclAttr
- ❌ ASTCXXMethodDeclAttr
- ❌ ASTCallExprAttr
- ❌ ASTDeclAttr
- ❌ ASTExprAttr
- ❌ ASTFunctionDeclAttr
- ❌ ASTRecordDeclAttr
- ❌ ASTTagDeclAttr
- ❌ ASTTypeDeclAttr
- ❌ ASTVarDeclAttr
- ❌ AddressPointAttr
- ❌ AddressSpaceAttr
- ❌ AnnotationAttr
- ❌ BitfieldInfoAttr
- ❌ BoolAttr
- ❌ OptInfoAttr
- ❌ TBAAAttr
- ❌ TBAAMemberAttr
- ❌ TBAAOmnipotentCharAttr
- ❌ TBAAScalarAttr
- ❌ TBAAStructAttr
- ❌ TBAATagAttr
- ❌ TBAAVTablePointerAttr
- ❌ TypeSizeInfoAttr
- ❌ CUDABinaryHandleAttr
- ❌ CUDAExternallyInitializedAttr
- ❌ CUDAKernelNameAttr
- ❌ CUDAShadowNameAttr
- ❌ CmpThreeWayInfoAttr
- ❌ ComplexAttr
- ❌ ConstArrayAttr
- ❌ ConstPtrAttr
- ❌ ConstRecordAttr
- ❌ ConstVectorAttr
- ❌ ConvergentAttr
- ❌ DataMemberAttr
- ❌ DynamicCastInfoAttr
- ❌ ExtraFuncAttributesAttr
- ❌ FPAttr
- ❌ GlobalAnnotationValuesAttr
- ❌ GlobalCtorAttr
- ❌ GlobalDtorAttr
- ❌ GlobalViewAttr
- ❌ InlineAttr
- ❌ IntAttr
- ❌ LangAttr
- ❌ MethodAttr
- ❌ NoThrowAttr
- ❌ OpenCLKernelArgMetadataAttr
- ❌ OpenCLKernelAttr
- ❌ OpenCLKernelMetadataAttr
- ❌ OpenCLKernelUniformWorkGroupSizeAttr
- ❌ OpenCLVersionAttr
- ❌ OptNoneAttr
- ❌ PoisonAttr
- ❌ SignedOverflowBehaviorAttr
- ❌ TypeInfoAttr
- ❌ UWTableAttr
- ❌ UndefAttr
- ❌ VTableAttr
- ❌ VisibilityAttr
- ❌ ZeroAttr
Passes
…