xref: /llvm-project/llvm/test/CodeGen/PowerPC/cse-despite-rounding-mode.ll (revision 427fb35192f1f7bb694a5910b05abc5925a798b2)
15840f719SNemanja Ivanovic; The non-strictfp version of test/CodeGen/PowerPC/respect-rounding-mode.ll
25840f719SNemanja Ivanovic; Without strictfp, CSE should be free to eliminate the repeated multiply
35840f719SNemanja Ivanovic; and conversion instructions.
45840f719SNemanja Ivanovic; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \
55840f719SNemanja Ivanovic; RUN:   -mcpu=pwr8 -ppc-asm-full-reg-names < %s | grep 'xvrdpic' | count 2
65840f719SNemanja Ivanovic; RUN: llc -verify-machineinstrs --mtriple powerpc-unknown-linux-gnu \
75840f719SNemanja Ivanovic; RUN:   -mcpu=pwr9 -ppc-asm-full-reg-names < %s | grep 'xvrdpic' | count 2
85840f719SNemanja Ivanovic; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \
95840f719SNemanja Ivanovic; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names < %s | grep 'xvrdpic' | count 2
105840f719SNemanja Ivanovic
115840f719SNemanja Ivanovic; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \
125840f719SNemanja Ivanovic; RUN:   -mcpu=pwr8 -ppc-asm-full-reg-names < %s | grep 'xvmuldp' | count 2
135840f719SNemanja Ivanovic; RUN: llc -verify-machineinstrs --mtriple powerpc-unknown-linux-gnu \
145840f719SNemanja Ivanovic; RUN:   -mcpu=pwr9 -ppc-asm-full-reg-names < %s | grep 'xvmuldp' | count 2
155840f719SNemanja Ivanovic; RUN: llc -verify-machineinstrs --mtriple powerpc64le-unknown-linux-gnu \
165840f719SNemanja Ivanovic; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names < %s | grep 'xvmuldp' | count 2
17*427fb351SKai Nacke@IndirectCallPtr = dso_local local_unnamed_addr global ptr null, align 8
185840f719SNemanja Ivanovic
195840f719SNemanja Ivanovicdefine dso_local signext i32 @func1() local_unnamed_addr #0 {
205840f719SNemanja Ivanovicentry:
21*427fb351SKai Nacke  tail call void @directCall() #0
225840f719SNemanja Ivanovic  %0 = tail call <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double> <double -9.990000e+01, double 9.990000e+01>, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0
235840f719SNemanja Ivanovic  %vecext = extractelement <2 x double> %0, i32 0
245840f719SNemanja Ivanovic  %sub = tail call double @llvm.experimental.constrained.fsub.f64(double %vecext, double -9.900000e+01, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0
255840f719SNemanja Ivanovic  %conv = tail call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %sub, metadata !"fpexcept.ignore") #0
26*427fb351SKai Nacke  tail call void @directCall() #0
275840f719SNemanja Ivanovic  %1 = tail call <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double> <double -9.990000e+01, double 9.990000e+01>, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0
285840f719SNemanja Ivanovic  %vecext3 = extractelement <2 x double> %1, i32 1
295840f719SNemanja Ivanovic  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %vecext3, double 9.900000e+01, metadata !"une", metadata !"fpexcept.ignore") #0
305840f719SNemanja Ivanovic  br i1 %cmp, label %if.then, label %if.end
315840f719SNemanja Ivanovic
325840f719SNemanja Ivanovicif.then:                                          ; preds = %entry
335840f719SNemanja Ivanovic  tail call void @exit(i32 signext 2) #0
345840f719SNemanja Ivanovic  unreachable
355840f719SNemanja Ivanovic
365840f719SNemanja Ivanovicif.end:                                           ; preds = %entry
375840f719SNemanja Ivanovic  ret i32 %conv
385840f719SNemanja Ivanovic}
395840f719SNemanja Ivanovic
405840f719SNemanja Ivanovicdeclare void @directCall(...) local_unnamed_addr
415840f719SNemanja Ivanovic
425840f719SNemanja Ivanovicdeclare double @llvm.experimental.constrained.fsub.f64(double, double, metadata, metadata)
435840f719SNemanja Ivanovic
445840f719SNemanja Ivanovicdeclare i32 @llvm.experimental.constrained.fptosi.i32.f64(double, metadata)
455840f719SNemanja Ivanovic
465840f719SNemanja Ivanovicdeclare i1 @llvm.experimental.constrained.fcmp.f64(double, double, metadata, metadata)
475840f719SNemanja Ivanovic
485840f719SNemanja Ivanovicdeclare void @exit(i32 signext) local_unnamed_addr
495840f719SNemanja Ivanovic
505840f719SNemanja Ivanovicdefine dso_local signext i32 @func2() local_unnamed_addr #0 {
515840f719SNemanja Ivanovicentry:
52*427fb351SKai Nacke  %call = tail call <2 x double> @getvector1() #0
53*427fb351SKai Nacke  %call1 = tail call <2 x double> @getvector2() #0
54*427fb351SKai Nacke  tail call void @directCall() #0
555840f719SNemanja Ivanovic  %mul = tail call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> %call, <2 x double> %call1, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0
565840f719SNemanja Ivanovic  %vecext = extractelement <2 x double> %mul, i32 0
575840f719SNemanja Ivanovic  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %vecext, double 4.000000e+00, metadata !"oeq", metadata !"fpexcept.ignore") #0
585840f719SNemanja Ivanovic  br i1 %cmp, label %cleanup, label %if.end
595840f719SNemanja Ivanovic
605840f719SNemanja Ivanovicif.end:                                           ; preds = %entry
61*427fb351SKai Nacke  tail call void @directCall() #0
625840f719SNemanja Ivanovic  %mul10 = tail call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> %call, <2 x double> %call1, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0
635840f719SNemanja Ivanovic  %0 = tail call i32 @llvm.ppc.vsx.xvcmpeqdp.p(i32 2, <2 x double> %mul, <2 x double> %mul10) #0
645840f719SNemanja Ivanovic  br label %cleanup
655840f719SNemanja Ivanovic
665840f719SNemanja Ivanoviccleanup:                                          ; preds = %entry, %if.end
675840f719SNemanja Ivanovic  %retval.0 = phi i32 [ %0, %if.end ], [ 11, %entry ]
685840f719SNemanja Ivanovic  ret i32 %retval.0
695840f719SNemanja Ivanovic}
705840f719SNemanja Ivanovic
715840f719SNemanja Ivanovicdeclare <2 x double> @getvector1(...) local_unnamed_addr
725840f719SNemanja Ivanovic
735840f719SNemanja Ivanovicdeclare <2 x double> @getvector2(...) local_unnamed_addr
745840f719SNemanja Ivanovic
755840f719SNemanja Ivanovicdeclare <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double>, <2 x double>, metadata, metadata)
765840f719SNemanja Ivanovic
775840f719SNemanja Ivanovicdeclare i32 @llvm.ppc.vsx.xvcmpeqdp.p(i32, <2 x double>, <2 x double>)
785840f719SNemanja Ivanovic
795840f719SNemanja Ivanovicdefine dso_local signext i32 @func3() local_unnamed_addr #0 {
805840f719SNemanja Ivanovicentry:
81*427fb351SKai Nacke  %0 = load ptr, ptr @IndirectCallPtr, align 8
825840f719SNemanja Ivanovic  tail call void %0() #0
835840f719SNemanja Ivanovic  %1 = tail call <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double> <double -9.990000e+01, double 9.990000e+01>, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0
845840f719SNemanja Ivanovic  %vecext = extractelement <2 x double> %1, i32 0
855840f719SNemanja Ivanovic  %sub = tail call double @llvm.experimental.constrained.fsub.f64(double %vecext, double -9.900000e+01, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0
865840f719SNemanja Ivanovic  %conv = tail call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %sub, metadata !"fpexcept.ignore") #0
87*427fb351SKai Nacke  %2 = load ptr, ptr @IndirectCallPtr, align 8
885840f719SNemanja Ivanovic  tail call void %2() #0
895840f719SNemanja Ivanovic  %3 = tail call <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double> <double -9.990000e+01, double 9.990000e+01>, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0
905840f719SNemanja Ivanovic  %vecext4 = extractelement <2 x double> %3, i32 1
915840f719SNemanja Ivanovic  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %vecext4, double 9.900000e+01, metadata !"une", metadata !"fpexcept.ignore") #0
925840f719SNemanja Ivanovic  br i1 %cmp, label %if.then, label %if.end
935840f719SNemanja Ivanovic
945840f719SNemanja Ivanovicif.then:                                          ; preds = %entry
955840f719SNemanja Ivanovic  tail call void @exit(i32 signext 2) #0
965840f719SNemanja Ivanovic  unreachable
975840f719SNemanja Ivanovic
985840f719SNemanja Ivanovicif.end:                                           ; preds = %entry
995840f719SNemanja Ivanovic  ret i32 %conv
1005840f719SNemanja Ivanovic}
1015840f719SNemanja Ivanovic
1025840f719SNemanja Ivanovicdefine dso_local signext i32 @func4() local_unnamed_addr #0 {
1035840f719SNemanja Ivanovicentry:
104*427fb351SKai Nacke  %call = tail call <2 x double> @getvector1() #0
105*427fb351SKai Nacke  %call1 = tail call <2 x double> @getvector2() #0
106*427fb351SKai Nacke  %0 = load ptr, ptr @IndirectCallPtr, align 8
1075840f719SNemanja Ivanovic  tail call void %0() #0
1085840f719SNemanja Ivanovic  %mul = tail call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> %call, <2 x double> %call1, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0
1095840f719SNemanja Ivanovic  %vecext = extractelement <2 x double> %mul, i32 0
1105840f719SNemanja Ivanovic  %cmp = tail call i1 @llvm.experimental.constrained.fcmp.f64(double %vecext, double 4.000000e+00, metadata !"oeq", metadata !"fpexcept.ignore") #0
1115840f719SNemanja Ivanovic  br i1 %cmp, label %cleanup, label %if.end
1125840f719SNemanja Ivanovic
1135840f719SNemanja Ivanovicif.end:                                           ; preds = %entry
114*427fb351SKai Nacke  %1 = load ptr, ptr @IndirectCallPtr, align 8
1155840f719SNemanja Ivanovic  tail call void %1() #0
1165840f719SNemanja Ivanovic  %mul11 = tail call <2 x double> @llvm.experimental.constrained.fmul.v2f64(<2 x double> %call, <2 x double> %call1, metadata !"round.dynamic", metadata !"fpexcept.ignore") #0
1175840f719SNemanja Ivanovic  %2 = tail call i32 @llvm.ppc.vsx.xvcmpeqdp.p(i32 2, <2 x double> %mul, <2 x double> %mul11) #0
1185840f719SNemanja Ivanovic  br label %cleanup
1195840f719SNemanja Ivanovic
1205840f719SNemanja Ivanoviccleanup:                                          ; preds = %entry, %if.end
1215840f719SNemanja Ivanovic  %retval.0 = phi i32 [ %2, %if.end ], [ 11, %entry ]
1225840f719SNemanja Ivanovic  ret i32 %retval.0
1235840f719SNemanja Ivanovic}
1245840f719SNemanja Ivanovic
1255840f719SNemanja Ivanovicdeclare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)
1265840f719SNemanja Ivanovic
1275840f719SNemanja Ivanovicattributes #0 = { nounwind }
128