blob: ab02205eb14f26f6d377e8e861beb975d5695812 [file]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -S -passes=mergefunc < %s | FileCheck %s
define i32 @fn_add_nuw_nsw(i32 %a) {
; CHECK-LABEL: define i32 @fn_add_nuw_nsw(
; CHECK-SAME: i32 [[A:%.*]]) {
; CHECK-NEXT: [[ADD:%.*]] = add nuw i32 [[A]], 1
; CHECK-NEXT: ret i32 [[ADD]]
;
%add = add nuw nsw i32 %a, 1
ret i32 %add
}
define internal i32 @fn_add_nuw(i32 %a) {
%add = add nuw i32 %a, 1
ret i32 %add
}
define ptr @fn_gep_inbounds(ptr %a) {
; CHECK-LABEL: define ptr @fn_gep_inbounds(
; CHECK-SAME: ptr [[A:%.*]]) {
; CHECK-NEXT: [[GEP:%.*]] = getelementptr nusw i8, ptr [[A]], i64 1
; CHECK-NEXT: ret ptr [[GEP]]
;
%gep = getelementptr inbounds i8, ptr %a, i64 1
ret ptr %gep
}
define internal ptr @fn_gep_nusw(ptr %a) {
%gep = getelementptr nusw i8, ptr %a, i64 1
ret ptr %gep
}
define ptr @fn_gep_inbounds2(ptr %a) {
; CHECK-LABEL: define ptr @fn_gep_inbounds2(
; CHECK-SAME: ptr [[A:%.*]]) {
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[A]], i64 2
; CHECK-NEXT: ret ptr [[GEP]]
;
%gep = getelementptr inbounds i8, ptr %a, i64 2
ret ptr %gep
}
define internal ptr @fn_gep_nuw(ptr %a) {
%gep = getelementptr nuw i8, ptr %a, i64 2
ret ptr %gep
}
define float @fn_fadd_ninf_nnan(float %a) {
; CHECK-LABEL: define float @fn_fadd_ninf_nnan(
; CHECK-SAME: float [[A:%.*]]) {
; CHECK-NEXT: [[ADD:%.*]] = fadd ninf float [[A]], 1.000000e+00
; CHECK-NEXT: ret float [[ADD]]
;
%add = fadd ninf nnan float %a, 1.0
ret float %add
}
define internal float @fn_fadd_ninf_reassoc(float %a) {
%add = fadd ninf reassoc float %a, 1.0
ret float %add
}
define i32 @fn_vararg_add_nsw(i32 %a, ...) {
; CHECK-LABEL: define i32 @fn_vararg_add_nsw(
; CHECK-SAME: i32 [[A:%.*]], ...) {
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[A]], 1
; CHECK-NEXT: ret i32 [[ADD]]
;
%add = add nsw i32 %a, 1
ret i32 %add
}
define i32 @fn_vararg_add_wrap(i32 %a, ...) {
; CHECK-LABEL: define i32 @fn_vararg_add_wrap(
; CHECK-SAME: i32 [[A:%.*]], ...) {
; CHECK-NEXT: [[ADD:%.*]] = add i32 [[A]], 1
; CHECK-NEXT: ret i32 [[ADD]]
;
%add = add i32 %a, 1
ret i32 %add
}
define void @calls(i32 %x, ptr %p, float %f) {
; CHECK-LABEL: define void @calls(
; CHECK-SAME: i32 [[X:%.*]], ptr [[P:%.*]], float [[F:%.*]]) {
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @fn_add_nuw_nsw(i32 [[X]])
; CHECK-NEXT: [[TMP2:%.*]] = call i32 @fn_add_nuw_nsw(i32 [[X]])
; CHECK-NEXT: [[TMP3:%.*]] = call ptr @fn_gep_inbounds(ptr [[P]])
; CHECK-NEXT: [[TMP4:%.*]] = call ptr @fn_gep_inbounds(ptr [[P]])
; CHECK-NEXT: [[TMP5:%.*]] = call ptr @fn_gep_inbounds2(ptr [[P]])
; CHECK-NEXT: [[TMP6:%.*]] = call ptr @fn_gep_inbounds2(ptr [[P]])
; CHECK-NEXT: [[TMP7:%.*]] = call float @fn_fadd_ninf_nnan(float [[F]])
; CHECK-NEXT: [[TMP8:%.*]] = call float @fn_fadd_ninf_nnan(float [[F]])
; CHECK-NEXT: [[TMP9:%.*]] = call i32 (i32, ...) @fn_vararg_add_nsw(i32 [[X]])
; CHECK-NEXT: [[TMP10:%.*]] = call i32 (i32, ...) @fn_vararg_add_nsw(i32 [[X]])
; CHECK-NEXT: ret void
;
call i32 @fn_add_nuw_nsw(i32 %x)
call i32 @fn_add_nuw(i32 %x)
call ptr @fn_gep_inbounds(ptr %p)
call ptr @fn_gep_nusw(ptr %p)
call ptr @fn_gep_inbounds2(ptr %p)
call ptr @fn_gep_nuw(ptr %p)
call float @fn_fadd_ninf_nnan(float %f)
call float @fn_fadd_ninf_reassoc(float %f)
call i32 (i32, ...) @fn_vararg_add_nsw(i32 %x)
call i32 (i32, ...) @fn_vararg_add_wrap(i32 %x)
ret void
}