[llvm-dev] Why is there still ineffective code after -o3 optimization?

alexp via llvm-dev
2019-02-25T14:09:26Z

//=====================================================//=== full ll below



; ModuleID = '0.1.800866.ll'
source_filename = "entityMain.cpp"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

; Function Attrs: noinline nounwind optnone uwtable
define void @_Z27entityMainDataInputCallbackdRd(double %input, double*
dereferenceable(8) %o0) local_unnamed_addr #0 {
entry:
  %input.addr = alloca double, align 8
  %o0.addr = alloca double*, align 8
  %ui = alloca i32, align 4
  store double %input, double* %input.addr, align 8
  %0 = fptoui double %input to i64
  %1 = fptrunc double %input to float
  %2 = mul i64 %0, %0
  %3 = fptrunc double %input to float
  %4 = mul i64 %0, %0
  %5 = fsub float %3, %3
  store double* %o0, double** %o0.addr
  %6 = and i64 %0, %0
  %7 = fptoui float %3 to i1
  %8 = ashr i1 %7, %7
  store double* null, double** %o0.addr
  %9 = fptosi double %input to i64
  %10 = shl i1 %7, %7
  %11 = sitofp i1 %8 to float
  %12 = icmp uge i64 %6, %4
  %13 = and i64 %0, %6
  %14 = fcmp ole float %11, %11
  %15 = ashr i1 %10, %7
  %16 = sext i1 %10 to i64
  %17 = ashr i1 %7, %12
  %18 = alloca [2 x double]
  %19 = fcmp true float %11, %3
  br label %splittedblock7

splittedblock7:                                   ; preds = %entry
  %20 = select i1 %8, i1 %17, i1 %19
  %21 = fptoui float %1 to i1
  br label %splittedblock1

splittedblock1:                                   ; preds = %splittedblock7
  %22 = fptrunc double %input to float
  %23 = shl i1 %17, %20
  %24 = fsub float %5, %5
  br label %splittedblock35

splittedblock36:                                  ; preds = %splittedblock10
  br label %splittedblock15

splittedblock38:                                  ; preds = %splittedblock19
  br label %splittedblock21

splittedblock10:                                  ; preds = %splittedblock35
  br label %splittedblock36

splittedblock35:                                  ; preds = %splittedblock1
  br i1 %12, label %splittedblock14, label %splittedblock10

splittedblock14:                                  ; preds = %splittedblock35
  br label %splittedblock19

splittedblock19:                                  ; preds = %splittedblock14
  store double 0x3FF787378698A951, double* %o0
  br i1 %23, label %splittedblock38, label %splittedblock42

splittedblock42:                                  ; preds %splittedblock21,