xref: /llvm-project/llvm/test/CodeGen/RISCV/machine-combiner-mir.ll (revision b6c790736e77f79e819fa761fb13f2311296714a)
11978b4d9SAnton Sidorenko; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
21978b4d9SAnton Sidorenko; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs -mcpu=sifive-u74 \
314a5b9cdSAnton Sidorenko; RUN: -O1 -riscv-enable-machine-combiner=true        \
41978b4d9SAnton Sidorenko; RUN: -stop-after machine-combiner < %s | FileCheck %s
51978b4d9SAnton Sidorenko
61978b4d9SAnton Sidorenkodefine double @test_reassoc_fadd1(double %a0, double %a1, double %a2, double %a3) {
71978b4d9SAnton Sidorenko  ; CHECK-LABEL: name: test_reassoc_fadd1
81978b4d9SAnton Sidorenko  ; CHECK: bb.0 (%ir-block.0):
91978b4d9SAnton Sidorenko  ; CHECK-NEXT:   liveins: $f10_d, $f11_d, $f12_d, $f13_d
101978b4d9SAnton Sidorenko  ; CHECK-NEXT: {{  $}}
111978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:fpr64 = COPY $f13_d
121978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:fpr64 = COPY $f12_d
131978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:fpr64 = COPY $f11_d
141978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:fpr64 = COPY $f10_d
151978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FADD_D:%[0-9]+]]:fpr64 = nsz reassoc nofpexcept FADD_D [[COPY3]], [[COPY2]], 7, implicit $frm
161978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FADD_D1:%[0-9]+]]:fpr64 = nsz reassoc nofpexcept FADD_D [[COPY1]], [[COPY]], 7, implicit $frm
171978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FADD_D2:%[0-9]+]]:fpr64 = nsz reassoc nofpexcept FADD_D killed [[FADD_D]], killed [[FADD_D1]], 7, implicit $frm
181978b4d9SAnton Sidorenko  ; CHECK-NEXT:   $f10_d = COPY [[FADD_D2]]
191978b4d9SAnton Sidorenko  ; CHECK-NEXT:   PseudoRET implicit $f10_d
201978b4d9SAnton Sidorenko  %t0 = fadd nsz reassoc double %a0, %a1
211978b4d9SAnton Sidorenko  %t1 = fadd nsz reassoc double %t0, %a2
221978b4d9SAnton Sidorenko  %t2 = fadd nsz reassoc double %t1, %a3
231978b4d9SAnton Sidorenko  ret double %t2
241978b4d9SAnton Sidorenko}
251978b4d9SAnton Sidorenko
261978b4d9SAnton Sidorenkodefine double @test_reassoc_fmul1(double %a0, double %a1, double %a2, double %a3) {
271978b4d9SAnton Sidorenko  ; CHECK-LABEL: name: test_reassoc_fmul1
281978b4d9SAnton Sidorenko  ; CHECK: bb.0 (%ir-block.0):
291978b4d9SAnton Sidorenko  ; CHECK-NEXT:   liveins: $f10_d, $f11_d, $f12_d, $f13_d
301978b4d9SAnton Sidorenko  ; CHECK-NEXT: {{  $}}
311978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:fpr64 = COPY $f13_d
321978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:fpr64 = COPY $f12_d
331978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:fpr64 = COPY $f11_d
341978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:fpr64 = COPY $f10_d
351978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FMUL_D:%[0-9]+]]:fpr64 = nsz reassoc nofpexcept FMUL_D [[COPY3]], [[COPY2]], 7, implicit $frm
361978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FMUL_D1:%[0-9]+]]:fpr64 = nsz reassoc nofpexcept FMUL_D [[COPY1]], [[COPY]], 7, implicit $frm
371978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FMUL_D2:%[0-9]+]]:fpr64 = nsz reassoc nofpexcept FMUL_D killed [[FMUL_D]], killed [[FMUL_D1]], 7, implicit $frm
381978b4d9SAnton Sidorenko  ; CHECK-NEXT:   $f10_d = COPY [[FMUL_D2]]
391978b4d9SAnton Sidorenko  ; CHECK-NEXT:   PseudoRET implicit $f10_d
401978b4d9SAnton Sidorenko  %t0 = fmul nsz reassoc double %a0, %a1
411978b4d9SAnton Sidorenko  %t1 = fmul nsz reassoc double %t0, %a2
421978b4d9SAnton Sidorenko  %t2 = fmul nsz reassoc double %t1, %a3
431978b4d9SAnton Sidorenko  ret double %t2
441978b4d9SAnton Sidorenko}
451978b4d9SAnton Sidorenko
461978b4d9SAnton Sidorenko; Verify flags intersection
471978b4d9SAnton Sidorenkodefine double @test_reassoc_flags1(double %a0, double %a1, double %a2, double %a3) {
481978b4d9SAnton Sidorenko  ; CHECK-LABEL: name: test_reassoc_flags1
491978b4d9SAnton Sidorenko  ; CHECK: bb.0 (%ir-block.0):
501978b4d9SAnton Sidorenko  ; CHECK-NEXT:   liveins: $f10_d, $f11_d, $f12_d, $f13_d
511978b4d9SAnton Sidorenko  ; CHECK-NEXT: {{  $}}
521978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:fpr64 = COPY $f13_d
531978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:fpr64 = COPY $f12_d
541978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:fpr64 = COPY $f11_d
551978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:fpr64 = COPY $f10_d
561978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FADD_D:%[0-9]+]]:fpr64 = nsz reassoc nofpexcept FADD_D [[COPY3]], [[COPY2]], 7, implicit $frm
571978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FADD_D1:%[0-9]+]]:fpr64 = nsz reassoc nofpexcept FADD_D [[COPY1]], [[COPY]], 7, implicit $frm
581978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FADD_D2:%[0-9]+]]:fpr64 = nsz reassoc nofpexcept FADD_D killed [[FADD_D]], killed [[FADD_D1]], 7, implicit $frm
591978b4d9SAnton Sidorenko  ; CHECK-NEXT:   $f10_d = COPY [[FADD_D2]]
601978b4d9SAnton Sidorenko  ; CHECK-NEXT:   PseudoRET implicit $f10_d
611978b4d9SAnton Sidorenko  %t0 = fadd nsz reassoc double %a0, %a1
621978b4d9SAnton Sidorenko  %t1 = fadd contract nsz reassoc double %t0, %a2
631978b4d9SAnton Sidorenko  %t2 = fadd nsz reassoc double %t1, %a3
641978b4d9SAnton Sidorenko  ret double %t2
651978b4d9SAnton Sidorenko}
661978b4d9SAnton Sidorenko
671978b4d9SAnton Sidorenko; Verify flags intersection
681978b4d9SAnton Sidorenkodefine double @test_reassoc_flags2(double %a0, double %a1, double %a2, double %a3) {
691978b4d9SAnton Sidorenko  ; CHECK-LABEL: name: test_reassoc_flags2
701978b4d9SAnton Sidorenko  ; CHECK: bb.0 (%ir-block.0):
711978b4d9SAnton Sidorenko  ; CHECK-NEXT:   liveins: $f10_d, $f11_d, $f12_d, $f13_d
721978b4d9SAnton Sidorenko  ; CHECK-NEXT: {{  $}}
731978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:fpr64 = COPY $f13_d
741978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:fpr64 = COPY $f12_d
751978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:fpr64 = COPY $f11_d
761978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[COPY3:%[0-9]+]]:fpr64 = COPY $f10_d
771978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FADD_D:%[0-9]+]]:fpr64 = nsz reassoc nofpexcept FADD_D [[COPY3]], [[COPY2]], 7, implicit $frm
781978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FADD_D1:%[0-9]+]]:fpr64 = nsz contract reassoc nofpexcept FADD_D [[COPY1]], [[COPY]], 7, implicit $frm
791978b4d9SAnton Sidorenko  ; CHECK-NEXT:   [[FADD_D2:%[0-9]+]]:fpr64 = nsz contract reassoc nofpexcept FADD_D killed [[FADD_D]], killed [[FADD_D1]], 7, implicit $frm
801978b4d9SAnton Sidorenko  ; CHECK-NEXT:   $f10_d = COPY [[FADD_D2]]
811978b4d9SAnton Sidorenko  ; CHECK-NEXT:   PseudoRET implicit $f10_d
821978b4d9SAnton Sidorenko  %t0 = fadd nsz reassoc double %a0, %a1
831978b4d9SAnton Sidorenko  %t1 = fadd contract nsz reassoc double %t0, %a2
841978b4d9SAnton Sidorenko  %t2 = fadd contract nsz reassoc double %t1, %a3
851978b4d9SAnton Sidorenko  ret double %t2
861978b4d9SAnton Sidorenko}
87374d0765SAnton Sidorenko
88374d0765SAnton Sidorenko; Verify FRM
89374d0765SAnton Sidorenkodefine double @test_fmadd(double %a0, double %a1, double %a2) {
90374d0765SAnton Sidorenko  ; CHECK-LABEL: name: test_fmadd
91374d0765SAnton Sidorenko  ; CHECK: bb.0 (%ir-block.0):
92374d0765SAnton Sidorenko  ; CHECK-NEXT:   liveins: $f10_d, $f11_d, $f12_d
93374d0765SAnton Sidorenko  ; CHECK-NEXT: {{  $}}
94374d0765SAnton Sidorenko  ; CHECK-NEXT:   [[COPY:%[0-9]+]]:fpr64 = COPY $f12_d
95374d0765SAnton Sidorenko  ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:fpr64 = COPY $f11_d
96374d0765SAnton Sidorenko  ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:fpr64 = COPY $f10_d
97374d0765SAnton Sidorenko  ; CHECK-NEXT:   [[FMUL_D:%[0-9]+]]:fpr64 = contract nofpexcept FMUL_D [[COPY2]], [[COPY1]], 7, implicit $frm
98*b6c79073SAnton Sidorenko  ; CHECK-NEXT:   [[FMADD_D:%[0-9]+]]:fpr64 = contract nofpexcept FMADD_D [[COPY2]], [[COPY1]], [[COPY]], 7, implicit $frm
99*b6c79073SAnton Sidorenko  ; CHECK-NEXT:   [[FDIV_D:%[0-9]+]]:fpr64 = nofpexcept FDIV_D killed [[FMADD_D]], [[FMUL_D]], 7, implicit $frm
100374d0765SAnton Sidorenko  ; CHECK-NEXT:   $f10_d = COPY [[FDIV_D]]
101374d0765SAnton Sidorenko  ; CHECK-NEXT:   PseudoRET implicit $f10_d
102374d0765SAnton Sidorenko  %t0 = fmul contract double %a0, %a1
103374d0765SAnton Sidorenko  %t1 = fadd contract double %t0, %a2
104374d0765SAnton Sidorenko  %t2 = fdiv double %t1, %t0
105374d0765SAnton Sidorenko  ret double %t2
106374d0765SAnton Sidorenko}
107