blob: 49307e232f2354da883ec70d9ae8e4b98f65787f [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -passes=mergefunc -S < %s | FileCheck %s
; Functions whose atomic instructions differ only in alignment must not be
; merged.
define { i64, i1 } @cmpxchg_natural(ptr %p, i64 %cmp, i64 %new) {
; CHECK-LABEL: define { i64, i1 } @cmpxchg_natural(
; CHECK-SAME: ptr [[P:%.*]], i64 [[CMP:%.*]], i64 [[NEW:%.*]]) {
; CHECK-NEXT: [[R:%.*]] = cmpxchg ptr [[P]], i64 [[CMP]], i64 [[NEW]] seq_cst seq_cst, align 8
; CHECK-NEXT: ret { i64, i1 } [[R]]
;
%r = cmpxchg ptr %p, i64 %cmp, i64 %new seq_cst seq_cst, align 8
ret { i64, i1 } %r
}
define { i64, i1 } @cmpxchg_under(ptr %p, i64 %cmp, i64 %new) {
; CHECK-LABEL: define { i64, i1 } @cmpxchg_under(
; CHECK-SAME: ptr [[P:%.*]], i64 [[CMP:%.*]], i64 [[NEW:%.*]]) {
; CHECK-NEXT: [[R:%.*]] = cmpxchg ptr [[P]], i64 [[CMP]], i64 [[NEW]] seq_cst seq_cst, align 4
; CHECK-NEXT: ret { i64, i1 } [[R]]
;
%r = cmpxchg ptr %p, i64 %cmp, i64 %new seq_cst seq_cst, align 4
ret { i64, i1 } %r
}
define i64 @atomicrmw_natural(ptr %p, i64 %v) {
; CHECK-LABEL: define i64 @atomicrmw_natural(
; CHECK-SAME: ptr [[P:%.*]], i64 [[V:%.*]]) {
; CHECK-NEXT: [[R:%.*]] = atomicrmw xchg ptr [[P]], i64 [[V]] seq_cst, align 8
; CHECK-NEXT: ret i64 [[R]]
;
%r = atomicrmw xchg ptr %p, i64 %v seq_cst, align 8
ret i64 %r
}
define i64 @atomicrmw_under(ptr %p, i64 %v) {
; CHECK-LABEL: define i64 @atomicrmw_under(
; CHECK-SAME: ptr [[P:%.*]], i64 [[V:%.*]]) {
; CHECK-NEXT: [[R:%.*]] = atomicrmw xchg ptr [[P]], i64 [[V]] seq_cst, align 4
; CHECK-NEXT: ret i64 [[R]]
;
%r = atomicrmw xchg ptr %p, i64 %v seq_cst, align 4
ret i64 %r
}