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: [email protected]
ReportedBy: [email protected]
CC: [email protected]
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.
reg...@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;
}
reg...@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.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs