In analyzing issue #56483, it was noticed that running `opt` with `-reassociate` was missing some minor optimizations. For example, there were cases where the running `opt` on IR with floating-point instructions that have the `fast` flags applied, sometimes resulted in less efficient code than the input IR (things like dead instructions left behind, and missed reassociations). These were sometimes noted in the test-files with TODOs, to investigate further. This commit fixes some of these problems, removing some TODOs in the process. FTR, I refer to these as "minor" missed optimizations, because when running a full clang/llvm compilation, these inefficiencies are not happening, as other passes clean that residue up. Regardless, having cleaner IR produced by `opt`, makes assessing the quality of fixes done in `opt` easier.
18 lines
555 B
LLVM
18 lines
555 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt < %s -reassociate -S | FileCheck %s
|
|
|
|
define float @wibble(float %tmp6) #0 {
|
|
; CHECK-LABEL: @wibble(
|
|
; CHECK-NEXT: bb:
|
|
; CHECK-NEXT: [[TMP7:%.*]] = fmul float [[TMP6:%.*]], -1.000000e+00
|
|
; CHECK-NEXT: [[TMP9:%.*]] = fmul fast float [[TMP6]], 0xFFF0000000000000
|
|
; CHECK-NEXT: ret float [[TMP9]]
|
|
;
|
|
bb:
|
|
%tmp7 = fsub float -0.000000e+00, %tmp6
|
|
%tmp9 = fmul fast float %tmp7, 0x7FF0000000000000
|
|
ret float %tmp9
|
|
}
|
|
|
|
attributes #0 = { "use-soft-float"="false" }
|