[llvm] [DAGCombiner] Combine frem into fdiv+ftrunc+fma (PR #67642)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 15 06:11:25 PDT 2024


================
@@ -1597,3 +1597,150 @@ entry:
   %c = frem <16 x half> %a, %b
   ret <16 x half> %c
 }
+
+define double @frem_f64_fast(double %a, double %b) {
+; CHECK-SD-LABEL: frem_f64_fast:
+; CHECK-SD:       // %bb.0: // %entry
+; CHECK-SD-NEXT:    fdiv d2, d0, d1
+; CHECK-SD-NEXT:    frintz d2, d2
+; CHECK-SD-NEXT:    fmsub d0, d2, d1, d0
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: frem_f64_fast:
+; CHECK-GI:       // %bb.0: // %entry
+; CHECK-GI-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
+; CHECK-GI-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-GI-NEXT:    .cfi_offset w30, -16
+; CHECK-GI-NEXT:    bl fmod
+; CHECK-GI-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
+; CHECK-GI-NEXT:    ret
+entry:
+  %c = frem fast double %a, %b
----------------
arsenm wrote:

You should trim the flags to the minimum required, and have negative tests for each missing individual flag 

https://github.com/llvm/llvm-project/pull/67642


More information about the llvm-commits mailing list