[LLVMbugs] [Bug 3740] New: Odd missed optimization

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Thu Mar 5 16:11:25 PST 2009


http://llvm.org/bugs/show_bug.cgi?id=3740

           Summary: Odd missed optimization
           Product: new-bugs
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: regehr at cs.utah.edu
                CC: llvmbugs at cs.uiuc.edu


This is seen using r66136 on x86 on Ubuntu Hardy.

The code below should compile into "return 0", but fails to.  If the line of
code in func_1() is pasted into main(), everything gets optimized properly.

regehr at john-home:~/volatile/tmp141$ cat small2.c
#include <stdint.h>
#include <limits.h>

#define safe_lshift_macro_int32_t_s_s(left,right) \
  (((((int32_t)(left)) < ((int32_t)0)) \
  || (((int)(right)) < ((int32_t)0)) \
  || (((int)(right)) >= sizeof(int32_t)*CHAR_BIT) \
  || (((int32_t)(left)) > ((INT32_MAX) >> ((int)(right))))) \
  ? ((int32_t)(left)) \
  : (((int32_t)(left)) << ((int)(right))))

static int32_t
safe_lshift_func_int32_t_s_s(int32_t _left, int _right)
{
  return safe_lshift_macro_int32_t_s_s(_left,_right);
}

static uint8_t g_6;

static void func_1 (void);
static void func_1 (void)
{
  g_6 = safe_lshift_func_int32_t_s_s (g_6, g_6);
}

int main (void)
{
  func_1 ();
  return g_6;
}

regehr at john-home:~/volatile/tmp141$ llvm-gcc -O6 small2.c -S --emit-llvm -o -
; ModuleID = 'small2.c'
target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
target triple = "i386-pc-linux-gnu"
@g_6 = internal global i8 0             ; <i8*> [#uses=2]

define i32 @main() nounwind {
entry:
        %0 = load i8* @g_6, align 1             ; <i8> [#uses=2]
        %1 = zext i8 %0 to i32          ; <i32> [#uses=5]
        %2 = icmp ugt i8 %0, 31         ; <i1> [#uses=1]
        br i1 %2, label %func_1.exit, label %bb6.i.i

bb6.i.i:                ; preds = %entry
        %3 = lshr i32 2147483647, %1            ; <i32> [#uses=1]
        %4 = icmp slt i32 %3, %1                ; <i1> [#uses=1]
        %5 = select i1 %4, i32 0, i32 %1                ; <i32> [#uses=1]
        %..i = shl i32 %1, %5           ; <i32> [#uses=1]
        br label %func_1.exit

func_1.exit:            ; preds = %entry, %bb6.i.i
        %6 = phi i32 [ %..i, %bb6.i.i ], [ %1, %entry ]         ; <i32>
[#uses=2]
        %7 = trunc i32 %6 to i8         ; <i8> [#uses=1]
        store i8 %7, i8* @g_6, align 1
        %8 = and i32 %6, 255            ; <i32> [#uses=1]
        ret i32 %8
}


-- 
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