[LLVMdev] Instruction does not dominate all its uses error

Apala Guha apala.guha at gmail.com
Tue Aug 26 06:44:26 PDT 2014


I am getting the following error :

Instruction does not dominate all uses!
  %88 = phi float [ %42, %._crit_edge ], [ %85, %43 ]
  %90 = fsub float 1.000000e+00, %88
Instruction does not dominate all uses!
  %88 = phi float [ %42, %._crit_edge ], [ %85, %43 ]
  %92 = phi float [ %88, %._crit_edge1 ], [ %90, %89 ]


for the following code:

define float @CNDF(float %InputX) nounwind uwtable {
  %1 = fcmp olt float %InputX, 0.000000e+00
  br i1 %1, label %43, label %._crit_edge

._crit_edge:                                      ; preds = %0
  %2 = fmul float %InputX, -5.000000e-01
  %3 = fmul float %InputX, %2
  %4 = fpext float %3 to double
  %5 = tail call double @exp(double %4) nounwind
  %6 = fptrunc double %5 to float
  %7 = fpext float %6 to double
  %8 = fmul double %7, 0x3FD9884533D43651
  %9 = fptrunc double %8 to float
  %10 = fpext float %InputX to double
  %11 = fmul double %10, 2.316419e-01
  %12 = fptrunc double %11 to float
  %13 = fadd float %12, 1.000000e+00
  %14 = fdiv float 1.000000e+00, %13
  %15 = bitcast float %14 to float
  %16 = bitcast float %15 to float
  %17 = bitcast float %15 to float
  %18 = fmul float %17, %17
  %19 = fmul float %17, %18
  %20 = fmul float %16, %19
  %21 = fmul float %16, %20
  %22 = fpext float %14 to double
  %23 = fmul double %22, 0x3FD470BF3A92F8EC
  %24 = fptrunc double %23 to float
  %25 = fpext float %18 to double
  %26 = fmul double %25, 0xBFD6D1F0E5A8325B
  %27 = fptrunc double %26 to float
  %28 = fpext float %19 to double
  %29 = fmul double %28, 0x3FFC80EF025F5E68
  %30 = fptrunc double %29 to float
  %31 = fadd float %27, %30
  %32 = fpext float %20 to double
  %33 = fmul double %32, 0xBFFD23DD4EF278D0
  %34 = fptrunc double %33 to float
  %35 = fadd float %31, %34
  %36 = fpext float %21 to double
  %37 = fmul double %36, 0x3FF548CDD6F42943
  %38 = fptrunc double %37 to float
  %39 = fadd float %35, %38
  %40 = fadd float %24, %39
  %41 = fmul float %9, %40
  %42 = fsub float 1.000000e+00, %41
  br label %86

; <label>:43                                      ; preds = %0
  %44 = fsub float -0.000000e+00, %InputX
  %45 = fmul float %44, -5.000000e-01
  %46 = fmul float %44, %45
  %47 = fpext float %46 to double
  %48 = tail call double @exp(double %47) nounwind
  %49 = fptrunc double %48 to float
  %50 = fpext float %49 to double
  %51 = fmul double %50, 0x3FD9884533D43651
  %52 = fptrunc double %51 to float
  %53 = fpext float %44 to double
  %54 = fmul double %53, 2.316419e-01
  %55 = fptrunc double %54 to float
  %56 = fadd float %55, 1.000000e+00
  %57 = fdiv float 1.000000e+00, %56
  %58 = bitcast float %57 to float
  %59 = bitcast float %58 to float
  %60 = bitcast float %58 to float
  %61 = fmul float %60, %60
  %62 = fmul float %60, %61
  %63 = fmul float %59, %62
  %64 = fmul float %59, %63
  %65 = fpext float %57 to double
  %66 = fmul double %65, 0x3FD470BF3A92F8EC
  %67 = fptrunc double %66 to float
  %68 = fpext float %61 to double
  %69 = fmul double %68, 0xBFD6D1F0E5A8325B
  %70 = fptrunc double %69 to float
  %71 = fpext float %62 to double
  %72 = fmul double %71, 0x3FFC80EF025F5E68
  %73 = fptrunc double %72 to float
  %74 = fadd float %70, %73
  %75 = fpext float %63 to double
  %76 = fmul double %75, 0xBFFD23DD4EF278D0
  %77 = fptrunc double %76 to float
  %78 = fadd float %74, %77
  %79 = fpext float %64 to double
  %80 = fmul double %79, 0x3FF548CDD6F42943
  %81 = fptrunc double %80 to float
  %82 = fadd float %78, %81
  %83 = fadd float %67, %82
  %84 = fmul float %52, %83
  %85 = fsub float 1.000000e+00, %84
  br label %86

; <label>:86                                      ; preds = %43,
%._crit_edge
  %87 = phi i1 [ false, %._crit_edge ], [ true, %43 ]
  %88 = phi float [ %42, %._crit_edge ], [ %85, %43 ]
  br i1 %87, label %89, label %._crit_edge1

._crit_edge1:                                     ; preds = %86
  br label %91

; <label>:89                                      ; preds = %86
  %90 = fsub float 1.000000e+00, %88
  br label %91

; <label>:91                                      ; preds = %89,
%._crit_edge1
  %92 = phi float [ %88, %._crit_edge1 ], [ %90, %89 ]
  ret float %92
}


The error is weird because the said instruction does dominate all its uses.
Any thoughts are welcome.

Thanks.
-Apala



Apala Guha
Assistant Professor
IIIT-Delhi, New Delhi, India
http://www.iiitd.edu.in/~apala
<https://sites.google.com/site/apalaguha/home>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140826/7b5fc45b/attachment.html>


More information about the llvm-dev mailing list