mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
365b05fe29
FindAvailableLoadedValue() relies on FindAvailablePtrLoadStore() to run the alias analysis when searching for an equivalent value. However, FindAvailablePtrLoadStore() calls the alias analysis framework with a memory location for the load constructed from an address and a size, which thus lacks TBAA metadata info. This commit modifies FindAvailablePtrLoadStore() to accept an optional memory location as parameter to allow FindAvailableLoadedValue() to create it based on the load instruction, which would then have TBAA metadata info attached. Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D99206
25 lines
922 B
LLVM
25 lines
922 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -tbaa -instcombine -S < %s | FileCheck %s
|
|
|
|
; Check that load to load forwarding works with non aliasing store inbetween.
|
|
define i32 @test_load_store_load_combine(i32*, float*) {
|
|
; CHECK-LABEL: @test_load_store_load_combine(
|
|
; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[TMP0:%.*]], align 4, !tbaa [[TBAA0:![0-9]+]]
|
|
; CHECK-NEXT: [[F:%.*]] = sitofp i32 [[A]] to float
|
|
; CHECK-NEXT: store float [[F]], float* [[TMP1:%.*]], align 4, !tbaa [[TBAA4:![0-9]+]]
|
|
; CHECK-NEXT: ret i32 [[A]]
|
|
;
|
|
%a = load i32, i32* %0, align 4, !tbaa !0
|
|
%f = sitofp i32 %a to float
|
|
store float %f, float* %1, align 4, !tbaa !4
|
|
%b = load i32, i32* %0, align 4, !tbaa !0
|
|
ret i32 %b
|
|
}
|
|
|
|
!0 = !{!1, !1, i64 0}
|
|
!1 = !{!"int", !2, i64 0}
|
|
!2 = !{!"omnipotent char", !3, i64 0}
|
|
!3 = !{!"Simple C++ TBAA"}
|
|
!4 = !{!5, !5, i64 0}
|
|
!5 = !{!"float", !2, i64 0}
|