Skip to content

Commit 9a9b70a

Browse files
committed
[PhaseOrdering][X86] Add test coverage for llvm#58139
1 parent d9af03b commit 9a9b70a

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

llvm/test/Transforms/PhaseOrdering/X86/addsub-inseltpoison.ll

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,30 @@ define void @add_aggregate_store(<2 x float> %a0, <2 x float> %a1, <2 x float> %
9797
store float %add10, ptr %r3, align 4
9898
ret void
9999
}
100+
101+
; PR58139
102+
define <2 x double> @_mm_complexmult_pd_naive(<2 x double> %a, <2 x double> %b) {
103+
; CHECK-LABEL: @_mm_complexmult_pd_naive(
104+
; CHECK-NEXT: [[B1:%.*]] = extractelement <2 x double> [[B:%.*]], i64 1
105+
; CHECK-NEXT: [[TMP1:%.*]] = fneg double [[B1]]
106+
; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <2 x double> [[A:%.*]], <2 x double> poison, <2 x i32> <i32 1, i32 1>
107+
; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <2 x double> [[B]], <2 x double> poison, <2 x i32> <i32 poison, i32 0>
108+
; CHECK-NEXT: [[TMP4:%.*]] = insertelement <2 x double> [[TMP3]], double [[TMP1]], i64 0
109+
; CHECK-NEXT: [[TMP5:%.*]] = fmul <2 x double> [[TMP2]], [[TMP4]]
110+
; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <2 x double> [[A]], <2 x double> poison, <2 x i32> zeroinitializer
111+
; CHECK-NEXT: [[TMP7:%.*]] = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> [[TMP6]], <2 x double> [[B]], <2 x double> [[TMP5]])
112+
; CHECK-NEXT: ret <2 x double> [[TMP7]]
113+
;
114+
%a0 = extractelement <2 x double> %a, i32 0
115+
%a1 = extractelement <2 x double> %a, i32 1
116+
%b0 = extractelement <2 x double> %b, i32 0
117+
%b1 = extractelement <2 x double> %b, i32 1
118+
%mul10 = fmul double %a1, %b0
119+
%mul11 = fmul double %a1, %b1
120+
%neg11 = fneg double %mul11
121+
%madd0 = call double @llvm.fmuladd.f64(double %a0, double %b0, double %neg11)
122+
%madd1 = call double @llvm.fmuladd.f64(double %a0, double %b1, double %mul10)
123+
%res0 = insertelement <2 x double> poison, double %madd0, i32 0
124+
%res1 = insertelement <2 x double> %res0, double %madd1, i32 1
125+
ret <2 x double> %res1
126+
}

llvm/test/Transforms/PhaseOrdering/X86/addsub.ll

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,30 @@ define void @add_aggregate_store(<2 x float> %a0, <2 x float> %a1, <2 x float> %
9797
store float %add10, ptr %r3, align 4
9898
ret void
9999
}
100+
101+
; PR58139
102+
define <2 x double> @_mm_complexmult_pd_naive(<2 x double> %a, <2 x double> %b) {
103+
; CHECK-LABEL: @_mm_complexmult_pd_naive(
104+
; CHECK-NEXT: [[B1:%.*]] = extractelement <2 x double> [[B:%.*]], i64 1
105+
; CHECK-NEXT: [[TMP1:%.*]] = fneg double [[B1]]
106+
; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <2 x double> [[A:%.*]], <2 x double> poison, <2 x i32> <i32 1, i32 1>
107+
; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <2 x double> [[B]], <2 x double> poison, <2 x i32> <i32 poison, i32 0>
108+
; CHECK-NEXT: [[TMP4:%.*]] = insertelement <2 x double> [[TMP3]], double [[TMP1]], i64 0
109+
; CHECK-NEXT: [[TMP5:%.*]] = fmul <2 x double> [[TMP2]], [[TMP4]]
110+
; CHECK-NEXT: [[TMP6:%.*]] = shufflevector <2 x double> [[A]], <2 x double> poison, <2 x i32> zeroinitializer
111+
; CHECK-NEXT: [[TMP7:%.*]] = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> [[TMP6]], <2 x double> [[B]], <2 x double> [[TMP5]])
112+
; CHECK-NEXT: ret <2 x double> [[TMP7]]
113+
;
114+
%a0 = extractelement <2 x double> %a, i32 0
115+
%a1 = extractelement <2 x double> %a, i32 1
116+
%b0 = extractelement <2 x double> %b, i32 0
117+
%b1 = extractelement <2 x double> %b, i32 1
118+
%mul10 = fmul double %a1, %b0
119+
%mul11 = fmul double %a1, %b1
120+
%neg11 = fneg double %mul11
121+
%madd0 = call double @llvm.fmuladd.f64(double %a0, double %b0, double %neg11)
122+
%madd1 = call double @llvm.fmuladd.f64(double %a0, double %b1, double %mul10)
123+
%res0 = insertelement <2 x double> undef, double %madd0, i32 0
124+
%res1 = insertelement <2 x double> %res0, double %madd1, i32 1
125+
ret <2 x double> %res1
126+
}

0 commit comments

Comments
 (0)