[LLVMdev] Invalid comparison instruction generation

Villmow, Micah Micah.Villmow at amd.com
Mon Nov 10 15:06:35 PST 2008

I have a simple program that generates correct intermediate
representation. However, when working on my backend, and my lowering
function gets called. The comparison operation is flipped via an invalid
transformation. i.e. gt ==> le, lt ==> ge etc..

define void @test_fc_if_gt(double %x, double %y, double addrspace(11)*
%result) {


        %x.addr = alloca double         ; <double*> [#uses=3]

        %y.addr = alloca double         ; <double*> [#uses=2]

        %result.addr = alloca double addrspace(11)*             ;
<double addrspace(11)**> [#uses=2]

        store double %x, double* %x.addr

        store double %y, double* %y.addr

        store double addrspace(11)* %result, double addrspace(11)**

        %tmp = load double* %x.addr             ; <double> [#uses=1]

        %tmp1 = load double* %y.addr            ; <double> [#uses=1]

        %cmp = fcmp ogt double %tmp, %tmp1              ; <i1> [#uses=1]

        br i1 %cmp, label %ifthen, label %ifend


ifthen:         ; preds = %entry

        %tmp2 = load double addrspace(11)** %result.addr
; <double addrspace(11)*> [#uses=1]

        %tmp3 = load double* %x.addr            ; <double> [#uses=1]

        store double %tmp3, double addrspace(11)* %tmp2

        br label %ifend


ifend:          ; preds = %ifthen, %entry

        ret void




With the above kernel run through llc with -march=x86
-view-dag-combine1-dags I still see the ogt as the comparison operation,
but when I run it with llc -march=x86 -view-legalize-dags the ogt node
has been transformed into a ule.


So, my question is, how do I get llvm to stop doing invalid translation
of comparison instructions? This problem affects my custom backend and I
have reproduced it with the x86 backend.



Micah Villmow

Systems Engineer

Advanced Technology & Performance

Advanced Micro Devices Inc.

4555 Great America Pkwy,

Santa Clara, CA. 95054

P: 408-572-6219

F: 408-572-6596


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081110/0bf10a19/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: good-graph.dot
Type: application/octet-stream
Size: 8955 bytes
Desc: good-graph.dot
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081110/0bf10a19/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bad-graph.dot
Type: application/octet-stream
Size: 7503 bytes
Desc: bad-graph.dot
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081110/0bf10a19/attachment-0001.obj>

More information about the llvm-dev mailing list