[LLVMbugs] [Bug 7036] New: Redundant "andl $1, %eax" instruction

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue May 4 01:01:44 PDT 2010


           Summary: Redundant "andl $1, %eax" instruction
           Product: new-bugs
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: mdevan.foobar at gmail.com
                CC: llvmbugs at cs.uiuc.edu

[Linux/amd64, LLVM r100854]

LLVM seems to like adding a redundant "andl $1, %eax" instruction in the code
generated (via clang) for the C code:


extern int f();
int test(int a) { return a && f(); }


define i32 @test(i32 %a) nounwind {
  %tobool = icmp eq i32 %a, 0                     ; <i1> [#uses=1]
  br i1 %tobool, label %land.end, label %land.rhs

land.rhs:                                         ; preds = %entry
  %call = tail call i32 (...)* @f() nounwind      ; <i32> [#uses=1]
  %tobool1 = icmp ne i32 %call, 0                 ; <i1> [#uses=1]
  br label %land.end

land.end:                                         ; preds = %entry, %land.rhs
  %0 = phi i1 [ false, %entry ], [ %tobool1, %land.rhs ] ; <i1> [#uses=1]
  %land.ext = zext i1 %0 to i32                   ; <i32> [#uses=1]
  ret i32 %land.ext


        pushq   %rbp
        movq    %rsp, %rbp
        testl   %edi, %edi
        jne     .LBB1_2
        xorb    %al, %al
        jmp     .LBB1_3
        xorb    %al, %al
        callq   f
        testl   %eax, %eax
        setne   %al
        movzbl  %al, %eax
        andl    $1, %eax
        popq    %rbp


Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list