[LLVMbugs] [Bug 20780] New: "optimized" __atomic_*_{1, 2, 4, 8, 16} libcalls use broken calling convention

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Aug 27 15:51:03 PDT 2014


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

            Bug ID: 20780
           Summary: "optimized" __atomic_*_{1,2,4,8,16} libcalls use
                    broken calling convention
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: LLVM Codegen
          Assignee: unassignedclangbugs at nondot.org
          Reporter: richard-llvm at metafoo.co.uk
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Consider:

double a, b, c; void g() { __atomic_exchange(&a, &b, &c, 5); }
unsigned long long d, e, f; void h() { __atomic_exchange(&d, &e, &f, 5); }

Clang generates this nonsense:

define void @_Z1gv() #0 {
entry:
  %0 = load double* @b, align 4
  %call = call double @__atomic_exchange_8(i8* bitcast (double* @a to i8*),
double %0, i32 5)
  ret void
}

declare double @__atomic_exchange_8(i8*, double, i32)

define void @_Z1hv() #0 {
entry:
  %0 = load i64* @e, align 4
  %call = call i64 bitcast (double (i8*, double, i32)* @__atomic_exchange_8 to
i64 (i8*, i64, i32)*)(i8* bitcast (i64* @d to i8*), i64 %0, i32 5)
  ret void
}

Note that we bitcast the function and use the wrong calling convention for both
calls.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20140827/1a19d3ef/attachment.html>


More information about the llvm-bugs mailing list