https://bugs.llvm.org/show_bug.cgi?id=50270

            Bug ID: 50270
           Summary: [Inliner] noalias metadata incorrectly propagated to
                    caller instructions
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Interprocedural Optimizations
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected],
                    [email protected]
            Blocks: 49317

declare { i64 } @opaque_callee()

define { i64 } @callee(i64 %x) {
  %res = insertvalue { i64 } undef, i64 %x, 0 
  ret { i64 } %res 
} 

define i64 @caller(i64* %p) {
  %s = call { i64 } @opaque_callee() 
  %x = extractvalue { i64 } %s, 0 
  call { i64 } @callee(i64 %x), !noalias !2 
  %y = load i64, i64* %p, !alias.scope !2 
  ret i64 %y 
} 

!0 = !{!0, !"domain"}
!1 = !{!1, !0, !"scope"}
!2 = !{!1} 

; RUN: opt -S -inline < %s

declare { i64 } @opaque_callee()

define { i64 } @callee(i64 %x) {
  %res = insertvalue { i64 } undef, i64 %x, 0
  ret { i64 } %res
}

define i64 @caller(i64* %p) {
  %s = call { i64 } @opaque_callee(), !noalias !0
  %x = extractvalue { i64 } %s, 0
  %y = load i64, i64* %p, align 4, !alias.scope !0
  ret i64 %y
}

!0 = !{!1}
!1 = distinct !{!1, !2, !"scope"}
!2 = distinct !{!2, !"domain"}

The !noalias metadata on the @callee() call is propagated to the
@opaque_callee() call from the caller.

This happens because VMap may map to instructions from the caller if
simplification occurred. The existing check in
https://github.com/llvm/llvm-project/blob/d4bdeca5765ac2e81e217a5fa873d1ffbf0e95b0/llvm/lib/Transforms/Utils/InlineFunction.cpp#L796-L799
protects against a similar problem, but does not cover this case.

I believe the same basic problem also applies to a few other VMap walks inside
the inliner.

This was originally reported at https://github.com/rust-lang/rust/issues/84958.


Referenced Bugs:

https://bugs.llvm.org/show_bug.cgi?id=49317
[Bug 49317] [meta] 12.0.1 Release Blockers
-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to