-
Notifications
You must be signed in to change notification settings - Fork 138
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Flang2] Fix duplicate TBAA type systems across modules
In Flang, functions within the same module are assigned unique TBAA type system IDs based on their order, but functions in different modules can unintentionally receive the same ID, leading to incorrect non-aliasing results. This commit resolves the issue by appending a hash of the module name to each function type system metadata, ensuring unique type systems across modules and preventing aliasing errors.
- Loading branch information
1 parent
2b33e62
commit 5f2b4e0
Showing
5 changed files
with
95 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
! This test contians two files, tbaa_multimod_01.f90 and tbaa_multimod_01_input.f90 | ||
! RUN: %flang -emit-llvm -c -O3 %s -o %t.bc | ||
! RUN: %flang -emit-llvm -c -O3 %S/tbaa_multimod_01_input.f90 -o %t2.bc | ||
! RUN: llvm-link -o %t3.bc %t.bc %t2.bc | ||
! RUN: opt -aa-trace -O3 -o - %t3.bc 2>&1 | FileCheck %s | ||
! CHECK-NOT: End ptr getelementptr (%struct.BSS1, ptr @.BSS1, i64 -1, i32 0, i64 16) @ LocationSize::precise(16), ptr inttoptr (i64 56 to ptr) @ LocationSize::precise(8) = NoAlias | ||
|
||
program main | ||
implicit none | ||
integer, parameter :: n = 5 | ||
real :: arr(n) | ||
integer :: i | ||
i = 0 | ||
arr = 3.2 | ||
arr(i) = 4 | ||
call modify1(arr) | ||
call modify2(arr) | ||
|
||
arr(i) = arr(i) + 2.5 | ||
call printout(arr) | ||
end program main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
! A part of the test provided in tbaa_multimod_01.f90 | ||
! Empty RUN and CHECK to prevent error | ||
! RUN: echo "NoCheck" | FileCheck %s | ||
! CHECK: NoCheck | ||
|
||
subroutine modify1(arr) | ||
implicit none | ||
real, intent(inout) :: arr(:) | ||
arr(0) = arr(0) + 0.5 | ||
end subroutine modify1 | ||
|
||
subroutine modify2(arr) | ||
implicit none | ||
real, intent(inout) :: arr(:) | ||
arr(2) = arr(2) + 1.5 | ||
end subroutine modify2 | ||
|
||
subroutine printout(arr) | ||
implicit none | ||
real, intent(in) :: arr(:) | ||
integer :: i | ||
do i = 1, size(arr) | ||
print arr(i), " " | ||
enddo | ||
end subroutine printout |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
! This test contians two files, tbaa_multimod_02.f90 and tbaa_multimod_02_input.f90 | ||
! RUN: %flang -emit-llvm -c -O3 %s -o %t.bc | ||
! RUN: %flang -emit-llvm -c -O3 %S/tbaa_multimod_02_input.f90 -o %t2.bc | ||
! RUN: llvm-link -o %t3.bc %t.bc %t2.bc | ||
! RUN: opt -aa-trace -O3 -o - %t3.bc 2>&1 | FileCheck %s | ||
! CHECK-NOT: End ptr getelementptr inbounds (%struct.BSS1, ptr @.BSS1, i64 0, i32 0, i64 16) @ LocationSize::precise(4), ptr inttoptr (i64 56 to ptr) @ LocationSize::precise(8) = NoAlias | ||
|
||
program main | ||
implicit none | ||
integer, parameter :: n = 5 | ||
real :: arr(n) | ||
integer :: i | ||
arr = 1 | ||
call to_load(arr) | ||
arr(0) = 4 | ||
call to_load(arr) | ||
end program main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
! A part of the test provided in tbaa_multimod_02.f90 | ||
! Empty RUN and CHECK to prevent error | ||
! RUN: echo "NoCheck" | FileCheck %s | ||
! CHECK: NoCheck | ||
|
||
subroutine to_load(arr) | ||
implicit none | ||
real, intent(inout) :: arr(:) | ||
real :: var | ||
var = arr(0) | ||
var = var * 2 | ||
print var | ||
end subroutine to_load |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters