[LLVMbugs] [Bug 3060] New: New IRgen of 'if' with constants is broken.

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Wed Nov 12 16:58:47 PST 2008


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

           Summary: New IRgen of 'if' with constants is broken.
           Product: clang
           Version: unspecified
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: major
          Priority: P2
         Component: LLVM Codegen
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: daniel at zuster.org
                CC: llvmbugs at cs.uiuc.edu


The new constant IRgen is too aggressive because it is possible to evaluate
expressions with side effects to constants.
--
ddunbar at lordcrumb:CodeGen$ cat if.c
int g0(void);

int f0(void) {
  if (g0() && 0)
    return 0;
  return 1;
}
ddunbar at lordcrumb:CodeGen$ clang -emit-llvm -o - -O3 if.c
; ModuleID = 'if.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:128:128"
target triple = "i686-apple-darwin10.0.0d3"

define i32 @f0() nounwind readnone {
entry:
        ret i32 1
}
--

The same issue occurs in other places, for example with the comma operator.

Chris and I discussed and came up with a plan to have tryEvaluate return more
information about the folded constant. The idea would be to have the result be
one of
(1) not evaluatable
(2) C99 ICE, which should never have side effects or labels
(3) constant value bla, with optional bits indicating if the expression has
side effects and if the expression has labels (useful for consumers in
different contexts). One can imagine other bits like imprecise-floating-point
result being useful in time.

This bug is a placeholder for this work.


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