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