mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
4b5fd94277
In cases where the alignment of the datatype is smaller than expected by the instruction, the address is aligned. The aligned address is used for the load, but wasn't used for the store conditional, which resulted in a run-time alignment exception.
19 lines
519 B
LLVM
19 lines
519 B
LLVM
; RUN: llc -mtriple=hexagon < %s | FileCheck %s
|
|
|
|
; Test that the address for a store conditional for a byte is aligned
|
|
; correctly to use the memw_locked instruction.
|
|
|
|
; CHECK: [[REG:(r[0-9]+)]] = and(r{{[0-9]+}},#-4)
|
|
; CHECK: = memw_locked([[REG]])
|
|
; CHECK: memw_locked([[REG]],p{{[0-4]}}) =
|
|
|
|
@foo.a00 = internal global i8 0, align 1
|
|
|
|
; Function Attrs: nofree norecurse nounwind
|
|
define dso_local void @foo() local_unnamed_addr #0 {
|
|
entry:
|
|
%0 = cmpxchg volatile i8* @foo.a00, i8 0, i8 1 seq_cst seq_cst
|
|
ret void
|
|
}
|
|
|