[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