xref: /llvm-project/llvm/test/Transforms/ArgumentPromotion/volatile-atomic.ll (revision bcbc6151640f53e9d78392c66de9760c664d8b1d)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -passes=argpromotion < %s | FileCheck %s
3
4; Make sure volatile and atomic loads are not promoted.
5
6define internal i32 @callee_volatile(ptr %p) {
7; CHECK-LABEL: @callee_volatile(
8; CHECK-NEXT:    [[V:%.*]] = load volatile i32, ptr [[P:%.*]], align 4
9; CHECK-NEXT:    ret i32 [[V]]
10;
11  %v = load volatile i32, ptr %p
12  ret i32 %v
13}
14
15define void @caller_volatile(ptr %p) {
16; CHECK-LABEL: @caller_volatile(
17; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @callee_volatile(ptr [[P:%.*]])
18; CHECK-NEXT:    ret void
19;
20  call i32 @callee_volatile(ptr %p)
21  ret void
22}
23
24define internal i32 @callee_atomic(ptr %p) {
25; CHECK-LABEL: @callee_atomic(
26; CHECK-NEXT:    [[V:%.*]] = load atomic i32, ptr [[P:%.*]] seq_cst, align 4
27; CHECK-NEXT:    ret i32 [[V]]
28;
29  %v = load atomic i32, ptr %p seq_cst, align 4
30  ret i32 %v
31}
32
33define void @caller_atomic(ptr %p) {
34; CHECK-LABEL: @caller_atomic(
35; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @callee_atomic(ptr [[P:%.*]])
36; CHECK-NEXT:    ret void
37;
38  call i32 @callee_atomic(ptr %p)
39  ret void
40}
41