[ArgPromotion] Add test for volatile and atomic loads (NFC)

Argument promotion does handle these correctly (by not promoting
them), but there were no tests to ensure this.
This commit is contained in:
Nikita Popov 2022-02-02 09:43:38 +01:00
parent c099ca4e45
commit be20ee67e5
1 changed files with 40 additions and 0 deletions

View File

@ -0,0 +1,40 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -argpromotion < %s | FileCheck %s
; Make sure volatile and atomic loads are not promoted.
define internal i32 @callee_volatile(i32* %p) {
; CHECK-LABEL: @callee_volatile(
; CHECK-NEXT: [[V:%.*]] = load volatile i32, i32* [[P:%.*]], align 4
; CHECK-NEXT: ret i32 [[V]]
;
%v = load volatile i32, i32* %p
ret i32 %v
}
define void @caller_volatile(i32* %p) {
; CHECK-LABEL: @caller_volatile(
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @callee_volatile(i32* [[P:%.*]])
; CHECK-NEXT: ret void
;
call i32 @callee_volatile(i32* %p)
ret void
}
define internal i32 @callee_atomic(i32* %p) {
; CHECK-LABEL: @callee_atomic(
; CHECK-NEXT: [[V:%.*]] = load atomic i32, i32* [[P:%.*]] seq_cst, align 4
; CHECK-NEXT: ret i32 [[V]]
;
%v = load atomic i32, i32* %p seq_cst, align 4
ret i32 %v
}
define void @caller_atomic(i32* %p) {
; CHECK-LABEL: @caller_atomic(
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @callee_atomic(i32* [[P:%.*]])
; CHECK-NEXT: ret void
;
call i32 @callee_atomic(i32* %p)
ret void
}