r276250 - [Sema, X86] Add explicit check to ensure that builtins that require x86-64 target throw an error if used on 32-bit target.

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 25 09:58:50 PDT 2016


I see. Since it's not a regression and there are dependencies, let's
not merge it.

Thanks,
Hans

On Fri, Jul 22, 2016 at 12:39 PM, Craig Topper <craig.topper at gmail.com> wrote:
> 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 <hans at 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 at 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 at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>


More information about the cfe-commits mailing list