Skip to content

Lowered LLVM is preventing inlining #1478

@bcardosolopes

Description

@bcardosolopes

In clang/test/CIR/CodeGen/tbaa-vptr.cpp:

The LLVM IR produced by OG is as follows:

define dso_local void @_ZN1BD0Ev(ptr noundef nonnull align 8 dereferenceable(9) initializes((0, 8)) %this) unnamed_addr #0 align 2 {
entry:
  store ptr getelementptr inbounds nuw inrange(-16, 16) (i8, ptr @_ZTV1B, i64 16), ptr %this, align 8, !tbaa !5
  %0 = getelementptr inbounds nuw i8, ptr %this, i64 8
  tail call void @_ZN6MemberD1Ev(ptr noundef nonnull align 1 dereferenceable(1) %0) #3
  tail call void @_ZN1AD2Ev(ptr noundef nonnull align 8 dereferenceable(9) %this) #3
  tail call void @_ZdlPvm(ptr noundef %this, i64 noundef 16) #4
  ret void
}

In contrast, the LLVM IR generated by ClangIR is as follows:

define dso_local void @_ZN1BD0Ev(ptr %0) #1 {
  tail call void @_ZN1BD1Ev(ptr %0) #0
  tail call void @_ZdlPvm(ptr %0, i64 16)
  ret void
}

Is there something missing in the ClangIR?

Originally posted by @PikachuHyA in #1463 (comment)

Metadata

Metadata

Assignees

Labels

IR differenceA difference in ClangIR-generated LLVM IR that could complicate reusing original CodeGen testsgood first issueGood for newcomers

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions