Most of these have been broken like this for a long time so I'm not sure. This patch as is depends on r276249 too since we were missing qualifiers in the intrinsics file.
~Craig On Fri, Jul 22, 2016 at 6:55 AM, Hans Wennborg <h...@chromium.org> wrote: > Should we merge this to 3.9? > > On Thu, Jul 21, 2016 at 3:38 AM, Craig Topper via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > > Author: ctopper > > Date: Thu Jul 21 02:38:43 2016 > > New Revision: 276250 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=276250&view=rev > > Log: > > [Sema,X86] Add explicit check to ensure that builtins that require > x86-64 target throw an error if used on 32-bit target. > > > > If these builtins are allowed to go through on a 32-bit target they will > fire assertions in the backend. > > > > Fixes PR28635. > > > > Added: > > cfe/trunk/test/CodeGen/builtins-x86-disabled.c > > Modified: > > cfe/trunk/lib/Sema/SemaChecking.cpp > > > > Modified: cfe/trunk/lib/Sema/SemaChecking.cpp > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=276250&r1=276249&r2=276250&view=diff > > > ============================================================================== > > --- cfe/trunk/lib/Sema/SemaChecking.cpp (original) > > +++ cfe/trunk/lib/Sema/SemaChecking.cpp Thu Jul 21 02:38:43 2016 > > @@ -1597,6 +1597,56 @@ bool Sema::CheckX86BuiltinFunctionCall(u > > return SemaBuiltinCpuSupports(*this, TheCall); > > case X86::BI__builtin_ms_va_start: > > return SemaBuiltinMSVAStart(TheCall); > > + case X86::BI__builtin_ia32_addcarryx_u64: > > + case X86::BI__builtin_ia32_addcarry_u64: > > + case X86::BI__builtin_ia32_subborrow_u64: > > + case X86::BI__builtin_ia32_readeflags_u64: > > + case X86::BI__builtin_ia32_writeeflags_u64: > > + case X86::BI__builtin_ia32_bextr_u64: > > + case X86::BI__builtin_ia32_bextri_u64: > > + case X86::BI__builtin_ia32_bzhi_di: > > + case X86::BI__builtin_ia32_pdep_di: > > + case X86::BI__builtin_ia32_pext_di: > > + case X86::BI__builtin_ia32_crc32di: > > + case X86::BI__builtin_ia32_fxsave64: > > + case X86::BI__builtin_ia32_fxrstor64: > > + case X86::BI__builtin_ia32_xsave64: > > + case X86::BI__builtin_ia32_xrstor64: > > + case X86::BI__builtin_ia32_xsaveopt64: > > + case X86::BI__builtin_ia32_xrstors64: > > + case X86::BI__builtin_ia32_xsavec64: > > + case X86::BI__builtin_ia32_xsaves64: > > + case X86::BI__builtin_ia32_rdfsbase64: > > + case X86::BI__builtin_ia32_rdgsbase64: > > + case X86::BI__builtin_ia32_wrfsbase64: > > + case X86::BI__builtin_ia32_wrgsbase64: > > + case X86::BI__builtin_ia32_pbroadcastb512_gpr_mask: > > + case X86::BI__builtin_ia32_pbroadcastb256_gpr_mask: > > + case X86::BI__builtin_ia32_pbroadcastb128_gpr_mask: > > + case X86::BI__builtin_ia32_vcvtsd2si64: > > + case X86::BI__builtin_ia32_vcvtsd2usi64: > > + case X86::BI__builtin_ia32_vcvtss2si64: > > + case X86::BI__builtin_ia32_vcvtss2usi64: > > + case X86::BI__builtin_ia32_vcvttsd2si64: > > + case X86::BI__builtin_ia32_vcvttsd2usi64: > > + case X86::BI__builtin_ia32_vcvttss2si64: > > + case X86::BI__builtin_ia32_vcvttss2usi64: > > + case X86::BI__builtin_ia32_cvtss2si64: > > + case X86::BI__builtin_ia32_cvttss2si64: > > + case X86::BI__builtin_ia32_cvtsd2si64: > > + case X86::BI__builtin_ia32_cvttsd2si64: > > + case X86::BI__builtin_ia32_cvtsi2sd64: > > + case X86::BI__builtin_ia32_cvtsi2ss64: > > + case X86::BI__builtin_ia32_cvtusi2sd64: > > + case X86::BI__builtin_ia32_cvtusi2ss64: > > + case X86::BI__builtin_ia32_rdseed64_step: { > > + // These builtins only work on x86-64 targets. > > + const llvm::Triple &TT = Context.getTargetInfo().getTriple(); > > + if (TT.getArch() != llvm::Triple::x86_64) > > + return Diag(TheCall->getCallee()->getLocStart(), > > + diag::err_x86_builtin_32_bit_tgt); > > + return false; > > + } > > case X86::BI__builtin_ia32_extractf64x4_mask: > > case X86::BI__builtin_ia32_extracti64x4_mask: > > case X86::BI__builtin_ia32_extractf32x8_mask: > > > > Added: cfe/trunk/test/CodeGen/builtins-x86-disabled.c > > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-x86-disabled.c?rev=276250&view=auto > > > ============================================================================== > > --- cfe/trunk/test/CodeGen/builtins-x86-disabled.c (added) > > +++ cfe/trunk/test/CodeGen/builtins-x86-disabled.c Thu Jul 21 02:38:43 > 2016 > > @@ -0,0 +1,22 @@ > > +// REQUIRES: x86-registered-target > > +// RUN: not %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - > 2>&1 | FileCheck %s > > + > > +void call_x86_64_builtins(void) > > +{ > > + unsigned long long a = __builtin_ia32_crc32di(0, 0); > > + unsigned long long b; > > + unsigned int c = __builtin_ia32_rdseed64_step (&b); > > + unsigned long long d = __builtin_ia32_bextr_u64 (0, 0); > > + unsigned long long e = __builtin_ia32_pdep_di(0, 0); > > + unsigned long long f = __builtin_ia32_pext_di(0, 0); > > + unsigned long long g = __builtin_ia32_bzhi_di(0, 0); > > + unsigned long long h; > > + unsigned long long i = __builtin_ia32_addcarryx_u64(0, 0, 0, &h); > > + unsigned long long j; > > + unsigned long long k = __builtin_ia32_addcarry_u64(0, 0, 0, &j); > > + unsigned long long l; > > + unsigned long long m = __builtin_ia32_subborrow_u64(0, 0, 0, &l); > > +} > > + > > +// CHECK: error: this builtin is only available on x86-64 targets > > +// CHECK: __builtin_ia32_crc32di > > > > > > _______________________________________________ > > cfe-commits mailing list > > cfe-commits@lists.llvm.org > > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits