+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -instcombine -S | FileCheck %s
define double @std_cabs([2 x double] %z) {
-; CHECK-LABEL: define double @std_cabs(
-; CHECK: tail call double @cabs(
+; CHECK-LABEL: @std_cabs(
+; CHECK-NEXT: [[CALL:%.*]] = tail call double @cabs([2 x double] [[Z:%.*]])
+; CHECK-NEXT: ret double [[CALL]]
+;
%call = tail call double @cabs([2 x double] %z)
ret double %call
}
define float @std_cabsf([2 x float] %z) {
-; CHECK-LABEL: define float @std_cabsf(
-; CHECK: tail call float @cabsf(
+; CHECK-LABEL: @std_cabsf(
+; CHECK-NEXT: [[CALL:%.*]] = tail call float @cabsf([2 x float] [[Z:%.*]])
+; CHECK-NEXT: ret float [[CALL]]
+;
%call = tail call float @cabsf([2 x float] %z)
ret float %call
}
define fp128 @std_cabsl([2 x fp128] %z) {
-; CHECK-LABEL: define fp128 @std_cabsl(
-; CHECK: tail call fp128 @cabsl(
+; CHECK-LABEL: @std_cabsl(
+; CHECK-NEXT: [[CALL:%.*]] = tail call fp128 @cabsl([2 x fp128] [[Z:%.*]])
+; CHECK-NEXT: ret fp128 [[CALL]]
+;
%call = tail call fp128 @cabsl([2 x fp128] %z)
ret fp128 %call
}
define double @fast_cabs([2 x double] %z) {
-; CHECK-LABEL: define double @fast_cabs(
-; CHECK: %real = extractvalue [2 x double] %z, 0
-; CHECK: %imag = extractvalue [2 x double] %z, 1
-; CHECK: %1 = fmul fast double %real, %real
-; CHECK: %2 = fmul fast double %imag, %imag
-; CHECK: %3 = fadd fast double %1, %2
-; CHECK: %cabs = call fast double @llvm.sqrt.f64(double %3)
-; CHECK: ret double %cabs
+; CHECK-LABEL: @fast_cabs(
+; CHECK-NEXT: [[REAL:%.*]] = extractvalue [2 x double] [[Z:%.*]], 0
+; CHECK-NEXT: [[IMAG:%.*]] = extractvalue [2 x double] [[Z]], 1
+; CHECK-NEXT: [[TMP1:%.*]] = fmul fast double [[REAL]], [[REAL]]
+; CHECK-NEXT: [[TMP2:%.*]] = fmul fast double [[IMAG]], [[IMAG]]
+; CHECK-NEXT: [[TMP3:%.*]] = fadd fast double [[TMP1]], [[TMP2]]
+; CHECK-NEXT: [[CABS:%.*]] = call fast double @llvm.sqrt.f64(double [[TMP3]])
+; CHECK-NEXT: ret double [[CABS]]
+;
%call = tail call fast double @cabs([2 x double] %z)
ret double %call
}
define float @fast_cabsf([2 x float] %z) {
-; CHECK-LABEL: define float @fast_cabsf(
-; CHECK: %real = extractvalue [2 x float] %z, 0
-; CHECK: %imag = extractvalue [2 x float] %z, 1
-; CHECK: %1 = fmul fast float %real, %real
-; CHECK: %2 = fmul fast float %imag, %imag
-; CHECK: %3 = fadd fast float %1, %2
-; CHECK: %cabs = call fast float @llvm.sqrt.f32(float %3)
-; CHECK: ret float %cabs
+; CHECK-LABEL: @fast_cabsf(
+; CHECK-NEXT: [[REAL:%.*]] = extractvalue [2 x float] [[Z:%.*]], 0
+; CHECK-NEXT: [[IMAG:%.*]] = extractvalue [2 x float] [[Z]], 1
+; CHECK-NEXT: [[TMP1:%.*]] = fmul fast float [[REAL]], [[REAL]]
+; CHECK-NEXT: [[TMP2:%.*]] = fmul fast float [[IMAG]], [[IMAG]]
+; CHECK-NEXT: [[TMP3:%.*]] = fadd fast float [[TMP1]], [[TMP2]]
+; CHECK-NEXT: [[CABS:%.*]] = call fast float @llvm.sqrt.f32(float [[TMP3]])
+; CHECK-NEXT: ret float [[CABS]]
+;
%call = tail call fast float @cabsf([2 x float] %z)
ret float %call
}
define fp128 @fast_cabsl([2 x fp128] %z) {
-; CHECK-LABEL: define fp128 @fast_cabsl(
-; CHECK: %real = extractvalue [2 x fp128] %z, 0
-; CHECK: %imag = extractvalue [2 x fp128] %z, 1
-; CHECK: %1 = fmul fast fp128 %real, %real
-; CHECK: %2 = fmul fast fp128 %imag, %imag
-; CHECK: %3 = fadd fast fp128 %1, %2
-; CHECK: %cabs = call fast fp128 @llvm.sqrt.f128(fp128 %3)
-; CHECK: ret fp128 %cabs
+; CHECK-LABEL: @fast_cabsl(
+; CHECK-NEXT: [[REAL:%.*]] = extractvalue [2 x fp128] [[Z:%.*]], 0
+; CHECK-NEXT: [[IMAG:%.*]] = extractvalue [2 x fp128] [[Z]], 1
+; CHECK-NEXT: [[TMP1:%.*]] = fmul fast fp128 [[REAL]], [[REAL]]
+; CHECK-NEXT: [[TMP2:%.*]] = fmul fast fp128 [[IMAG]], [[IMAG]]
+; CHECK-NEXT: [[TMP3:%.*]] = fadd fast fp128 [[TMP1]], [[TMP2]]
+; CHECK-NEXT: [[CABS:%.*]] = call fast fp128 @llvm.sqrt.f128(fp128 [[TMP3]])
+; CHECK-NEXT: ret fp128 [[CABS]]
+;
%call = tail call fast fp128 @cabsl([2 x fp128] %z)
ret fp128 %call
}
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -instcombine -S | FileCheck %s
define double @std_cabs(double %real, double %imag) {
-; CHECK-LABEL: define double @std_cabs(
-; CHECK: tail call double @cabs(
+; CHECK-LABEL: @std_cabs(
+; CHECK-NEXT: [[CALL:%.*]] = tail call double @cabs(double [[REAL:%.*]], double [[IMAG:%.*]])
+; CHECK-NEXT: ret double [[CALL]]
+;
%call = tail call double @cabs(double %real, double %imag)
ret double %call
}
define float @std_cabsf(float %real, float %imag) {
-; CHECK-LABEL: define float @std_cabsf(
-; CHECK: tail call float @cabsf(
+; CHECK-LABEL: @std_cabsf(
+; CHECK-NEXT: [[CALL:%.*]] = tail call float @cabsf(float [[REAL:%.*]], float [[IMAG:%.*]])
+; CHECK-NEXT: ret float [[CALL]]
+;
%call = tail call float @cabsf(float %real, float %imag)
ret float %call
}
define fp128 @std_cabsl(fp128 %real, fp128 %imag) {
-; CHECK-LABEL: define fp128 @std_cabsl(
-; CHECK: tail call fp128 @cabsl(
+; CHECK-LABEL: @std_cabsl(
+; CHECK-NEXT: [[CALL:%.*]] = tail call fp128 @cabsl(fp128 [[REAL:%.*]], fp128 [[IMAG:%.*]])
+; CHECK-NEXT: ret fp128 [[CALL]]
+;
%call = tail call fp128 @cabsl(fp128 %real, fp128 %imag)
ret fp128 %call
}
define double @fast_cabs(double %real, double %imag) {
-; CHECK-LABEL: define double @fast_cabs(
-; CHECK: %1 = fmul fast double %real, %real
-; CHECK: %2 = fmul fast double %imag, %imag
-; CHECK: %3 = fadd fast double %1, %2
-; CHECK: %cabs = call fast double @llvm.sqrt.f64(double %3)
-; CHECK: ret double %cabs
+; CHECK-LABEL: @fast_cabs(
+; CHECK-NEXT: [[TMP1:%.*]] = fmul fast double [[REAL:%.*]], [[REAL]]
+; CHECK-NEXT: [[TMP2:%.*]] = fmul fast double [[IMAG:%.*]], [[IMAG]]
+; CHECK-NEXT: [[TMP3:%.*]] = fadd fast double [[TMP1]], [[TMP2]]
+; CHECK-NEXT: [[CABS:%.*]] = call fast double @llvm.sqrt.f64(double [[TMP3]])
+; CHECK-NEXT: ret double [[CABS]]
+;
%call = tail call fast double @cabs(double %real, double %imag)
ret double %call
}
define float @fast_cabsf(float %real, float %imag) {
-; CHECK-LABEL: define float @fast_cabsf(
-; CHECK: %1 = fmul fast float %real, %real
-; CHECK: %2 = fmul fast float %imag, %imag
-; CHECK: %3 = fadd fast float %1, %2
-; CHECK: %cabs = call fast float @llvm.sqrt.f32(float %3)
-; CHECK: ret float %cabs
+; CHECK-LABEL: @fast_cabsf(
+; CHECK-NEXT: [[TMP1:%.*]] = fmul fast float [[REAL:%.*]], [[REAL]]
+; CHECK-NEXT: [[TMP2:%.*]] = fmul fast float [[IMAG:%.*]], [[IMAG]]
+; CHECK-NEXT: [[TMP3:%.*]] = fadd fast float [[TMP1]], [[TMP2]]
+; CHECK-NEXT: [[CABS:%.*]] = call fast float @llvm.sqrt.f32(float [[TMP3]])
+; CHECK-NEXT: ret float [[CABS]]
+;
%call = tail call fast float @cabsf(float %real, float %imag)
ret float %call
}
define fp128 @fast_cabsl(fp128 %real, fp128 %imag) {
-; CHECK-LABEL: define fp128 @fast_cabsl(
-; CHECK: %1 = fmul fast fp128 %real, %real
-; CHECK: %2 = fmul fast fp128 %imag, %imag
-; CHECK: %3 = fadd fast fp128 %1, %2
-; CHECK: %cabs = call fast fp128 @llvm.sqrt.f128(fp128 %3)
-; CHECK: ret fp128 %cabs
+; CHECK-LABEL: @fast_cabsl(
+; CHECK-NEXT: [[TMP1:%.*]] = fmul fast fp128 [[REAL:%.*]], [[REAL]]
+; CHECK-NEXT: [[TMP2:%.*]] = fmul fast fp128 [[IMAG:%.*]], [[IMAG]]
+; CHECK-NEXT: [[TMP3:%.*]] = fadd fast fp128 [[TMP1]], [[TMP2]]
+; CHECK-NEXT: [[CABS:%.*]] = call fast fp128 @llvm.sqrt.f128(fp128 [[TMP3]])
+; CHECK-NEXT: ret fp128 [[CABS]]
+;
%call = tail call fast fp128 @cabsl(fp128 %real, fp128 %imag)
ret fp128 %call
}
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S -mtriple=i686-apple-macosx -instcombine %s | FileCheck %s
declare x86_fp80 @fabsl(x86_fp80)
define x86_fp80 @replace_fabs_call_f80(x86_fp80 %x) {
; CHECK-LABEL: @replace_fabs_call_f80(
-; CHECK-NEXT: [[TMP1:%.*]] = call x86_fp80 @llvm.fabs.f80(x86_fp80 %x)
-; CHECK-NEXT: ret x86_fp80 [[TMP1]]
+; CHECK-NEXT: [[FABSL:%.*]] = call x86_fp80 @llvm.fabs.f80(x86_fp80 [[X:%.*]])
+; CHECK-NEXT: ret x86_fp80 [[FABSL]]
;
%fabsl = tail call x86_fp80 @fabsl(x86_fp80 %x)
ret x86_fp80 %fabsl
define x86_fp80 @fmf_replace_fabs_call_f80(x86_fp80 %x) {
; CHECK-LABEL: @fmf_replace_fabs_call_f80(
-; CHECK-NEXT: [[TMP1:%.*]] = call nnan x86_fp80 @llvm.fabs.f80(x86_fp80 %x)
-; CHECK-NEXT: ret x86_fp80 [[TMP1]]
+; CHECK-NEXT: [[FABSL:%.*]] = call nnan x86_fp80 @llvm.fabs.f80(x86_fp80 [[X:%.*]])
+; CHECK-NEXT: ret x86_fp80 [[FABSL]]
;
%fabsl = tail call nnan x86_fp80 @fabsl(x86_fp80 %x)
ret x86_fp80 %fabsl
; CHECK: bb11:
; CHECK-NEXT: unreachable
; CHECK: bb12:
-; CHECK-NEXT: [[TMP0:%.*]] = call i8* @__inline_memcpy_chk(i8* bitcast (float* getelementptr inbounds ([480 x float], [480 x float]* @array, i32 0, i32 1) to i8*), i8* undef, i32 512) #3
+; CHECK-NEXT: [[TMP0:%.*]] = call i8* @__inline_memcpy_chk(i8* bitcast (float* getelementptr inbounds ([480 x float], [480 x float]* @array, i32 0, i32 1) to i8*), i8* undef, i32 512) [[ATTR3:#.*]]
; CHECK-NEXT: unreachable
;
entry:
; CHECK-NEXT: entry:
; CHECK-NEXT: [[TMP0:%.*]] = alloca [[STRUCT_DATA:%.*]], align 8
; CHECK-NEXT: [[TMP1:%.*]] = bitcast %struct.data* [[TMP0]] to i8*
-; CHECK-NEXT: call void @llvm.memset.p0i8.i32(i8* nonnull align 8 dereferenceable(1824) [[TMP1]], i8 0, i32 1824, i1 false) #0
+; CHECK-NEXT: call void @llvm.memset.p0i8.i32(i8* nonnull align 8 dereferenceable(1824) [[TMP1]], i8 0, i32 1824, i1 false) [[ATTR0:#.*]]
; CHECK-NEXT: [[TMP2:%.*]] = bitcast i8** [[ESC:%.*]] to %struct.data**
; CHECK-NEXT: store %struct.data* [[TMP0]], %struct.data** [[TMP2]], align 4
; CHECK-NEXT: ret i32 0
define i8* @test5(i32 %n) nounwind ssp {
; CHECK-LABEL: @test5(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[TMP0:%.*]] = tail call noalias dereferenceable_or_null(20) i8* @malloc(i32 20) #0
+; CHECK-NEXT: [[TMP0:%.*]] = tail call noalias dereferenceable_or_null(20) i8* @malloc(i32 20) [[ATTR0]]
; CHECK-NEXT: [[TMP1:%.*]] = load i8*, i8** @s, align 8
-; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* nonnull align 1 dereferenceable(10) [[TMP0]], i8* nonnull align 1 dereferenceable(10) [[TMP1]], i32 10, i1 false) #0
+; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* nonnull align 1 dereferenceable(10) [[TMP0]], i8* nonnull align 1 dereferenceable(10) [[TMP1]], i32 10, i1 false) [[ATTR0]]
; CHECK-NEXT: ret i8* [[TMP0]]
;
entry:
define void @test6(i32 %n) nounwind ssp {
; CHECK-LABEL: @test6(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[TMP0:%.*]] = tail call noalias dereferenceable_or_null(20) i8* @malloc(i32 20) #0
+; CHECK-NEXT: [[TMP0:%.*]] = tail call noalias dereferenceable_or_null(20) i8* @malloc(i32 20) [[ATTR0]]
; CHECK-NEXT: [[TMP1:%.*]] = load i8*, i8** @s, align 8
-; CHECK-NEXT: [[TMP2:%.*]] = tail call i8* @__memcpy_chk(i8* [[TMP0]], i8* [[TMP1]], i32 30, i32 20) #0
+; CHECK-NEXT: [[TMP2:%.*]] = tail call i8* @__memcpy_chk(i8* [[TMP0]], i8* [[TMP1]], i32 30, i32 20) [[ATTR0]]
; CHECK-NEXT: ret void
;
entry:
define i32 @test7(i8** %esc) {
; CHECK-LABEL: @test7(
-; CHECK-NEXT: [[ALLOC:%.*]] = call noalias dereferenceable_or_null(48) i8* @malloc(i32 48) #0
+; CHECK-NEXT: [[ALLOC:%.*]] = call noalias dereferenceable_or_null(48) i8* @malloc(i32 48) [[ATTR0]]
; CHECK-NEXT: store i8* [[ALLOC]], i8** [[ESC:%.*]], align 4
; CHECK-NEXT: ret i32 32
;
define i32 @test8(i8** %esc) {
; CHECK-LABEL: @test8(
-; CHECK-NEXT: [[ALLOC:%.*]] = call noalias dereferenceable_or_null(35) i8* @calloc(i32 5, i32 7) #0
+; CHECK-NEXT: [[ALLOC:%.*]] = call noalias dereferenceable_or_null(35) i8* @calloc(i32 5, i32 7) [[ATTR0]]
; CHECK-NEXT: store i8* [[ALLOC]], i8** [[ESC:%.*]], align 4
; CHECK-NEXT: ret i32 30
;
define i32 @test9(i8** %esc) {
; CHECK-LABEL: @test9(
-; CHECK-NEXT: [[CALL:%.*]] = tail call dereferenceable_or_null(8) i8* @strdup(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0)) #0
+; CHECK-NEXT: [[CALL:%.*]] = tail call dereferenceable_or_null(8) i8* @strdup(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0)) [[ATTR0]]
; CHECK-NEXT: store i8* [[CALL]], i8** [[ESC:%.*]], align 8
; CHECK-NEXT: ret i32 8
;
define i32 @test10(i8** %esc) {
; CHECK-LABEL: @test10(
-; CHECK-NEXT: [[CALL:%.*]] = tail call dereferenceable_or_null(4) i8* @strndup(i8* dereferenceable(8) getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 3) #0
+; CHECK-NEXT: [[CALL:%.*]] = tail call dereferenceable_or_null(4) i8* @strndup(i8* dereferenceable(8) getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 3) [[ATTR0]]
; CHECK-NEXT: store i8* [[CALL]], i8** [[ESC:%.*]], align 8
; CHECK-NEXT: ret i32 4
;