| ; 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 | |
| } | |