blob: 2fd32a8555d7199b903b87c4417a19a838256009 [file] [log] [blame] [edit]
; RUN: llc -mtriple=hexagon -O2 < %s | FileCheck %s
; Test coverage for HexagonSplitDoubleRegs: exercise the volatile memory
; operation path and the load/store splitting for 64-bit register operations.
; CHECK-LABEL: test_volatile_load:
; CHECK: memd
define i64 @test_volatile_load(ptr %p) {
entry:
%val = load volatile i64, ptr %p, align 8
ret i64 %val
}
; CHECK-LABEL: test_volatile_store:
; CHECK: memd
define void @test_volatile_store(ptr %p, i64 %val) {
entry:
store volatile i64 %val, ptr %p, align 8
ret void
}
; Non-volatile 64-bit loads can be split into two 32-bit loads.
; CHECK-LABEL: test_split_load:
; CHECK: memw
define i64 @test_split_load(ptr %p) {
entry:
%val = load i64, ptr %p, align 4
%add = add i64 %val, 1
ret i64 %add
}