Model AArch64 ZA and ZT0 intrinsic state using target_mem instead of inaccessiblemem. Bump the bitcode memory-attribute encoding and upgrade old AArch64 bitcode so prior inaccessiblemem effects are preserved on the new target memory locations. Non-AArch64 bitcode keeps the old interpretation.
36 lines
1.4 KiB
LLVM
36 lines
1.4 KiB
LLVM
; RUN: llvm-dis < %S/Inputs/aarch64-memory-attribute-upgrade.bc | FileCheck %s --check-prefix=AARCH64
|
|
; RUN: llvm-dis < %S/Inputs/x86-memory-attribute-upgrade.bc | FileCheck %s --check-prefix=NON-AARCH64
|
|
|
|
; The .bc inputs were generated by an older LLVM memory-attribute encoding,
|
|
; before AArch64 target memory was split out from inaccessible memory.
|
|
; The code was compiled using x86 and aarch64 hosts.
|
|
|
|
|
|
define void @test_inaccessible_read() #0 {
|
|
; AARCH64: ; Function Attrs: memory(inaccessiblemem: read, target_mem: read)
|
|
; AARCH64-NEXT: define void @test_inaccessible_read()
|
|
; NON-AARCH64: ; Function Attrs: memory(inaccessiblemem: read)
|
|
; NON-AARCH64-NEXT: define void @test_inaccessible_read()
|
|
ret void
|
|
}
|
|
|
|
define void @test_inaccessible_readwrite() #1 {
|
|
; AARCH64: ; Function Attrs: memory(inaccessiblemem: readwrite, target_mem: readwrite)
|
|
; AARCH64-NEXT: define void @test_inaccessible_readwrite()
|
|
; NON-AARCH64: ; Function Attrs: memory(inaccessiblemem: readwrite)
|
|
; NON-AARCH64-NEXT: define void @test_inaccessible_readwrite()
|
|
ret void
|
|
}
|
|
|
|
define void @test_inaccessible_none() #2 {
|
|
; AARCH64: ; Function Attrs: memory(none)
|
|
; AARCH64-NEXT: define void @test_inaccessible_none()
|
|
; NON-AARCH64: ; Function Attrs: memory(none)
|
|
; NON-AARCH64-NEXT: define void @test_inaccessible_none()
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { memory(inaccessiblemem: read) }
|
|
attributes #1 = { memory(inaccessiblemem: readwrite) }
|
|
attributes #2 = { memory(inaccessiblemem: none) }
|