@@ -1640,6 +1640,8 @@ llvm::opt::DerivedArgList *ToolChain::TranslateOffloadTargetArgs(
16401640 DerivedArgList *DAL = new DerivedArgList (Args.getBaseArgs ());
16411641 const OptTable &Opts = getDriver ().getOpts ();
16421642 bool Modified = false ;
1643+ auto &Triple = getTriple ();
1644+ const bool IsSYCL = DeviceOffloadKind == Action::OFK_SYCL;
16431645
16441646 // Handle -Xopenmp-target and -Xsycl-target-frontend flags
16451647 for (auto *A : Args) {
@@ -1654,13 +1656,15 @@ llvm::opt::DerivedArgList *ToolChain::TranslateOffloadTargetArgs(
16541656 // to correctly set metadata in intermediate files.
16551657 if (SameTripleAsHost ||
16561658 A->getOption ().matches (options::OPT_mcode_object_version_EQ) ||
1657- (getTriple ().getArch () == llvm::Triple::amdgcn &&
1658- DeviceOffloadKind != Action::OFK_SYCL)) {
1659+ (Triple.getArch () == llvm::Triple::amdgcn && !IsSYCL)) {
16591660 DAL->append (A);
16601661 continue ;
16611662 }
1662- // SPIR/SPIR-V special case for -mlong-double
1663- if (getTriple ().isSPIROrSPIRV () &&
1663+ // SPIR/SPIR-V and SYCL GPU special case for -mlong-double. We have to
1664+ // make sure that if user requested 64bit long double it is honored on
1665+ // both host and device.
1666+ if ((Triple.isSPIROrSPIRV () ||
1667+ (IsSYCL && (Triple.isAMDGCN () || Triple.isNVPTX ()))) &&
16641668 A->getOption ().matches (options::OPT_LongDouble_Group)) {
16651669 DAL->append (A);
16661670 continue ;
@@ -1683,7 +1687,7 @@ llvm::opt::DerivedArgList *ToolChain::TranslateOffloadTargetArgs(
16831687 // is similar, can be improved
16841688 if (DeviceOffloadKind == Action::OFK_OpenMP) {
16851689 XOffloadTargetNoTriple =
1686- A->getOption ().matches (options::OPT_Xopenmp_target);
1690+ A->getOption ().matches (options::OPT_Xopenmp_target);
16871691 if (A->getOption ().matches (options::OPT_Xopenmp_target_EQ)) {
16881692 llvm::Triple TT (getOpenMPTriple (A->getValue (0 )));
16891693
@@ -1699,12 +1703,12 @@ llvm::opt::DerivedArgList *ToolChain::TranslateOffloadTargetArgs(
16991703 DAL->append (A);
17001704 continue ;
17011705 }
1702- } else if (DeviceOffloadKind == Action::OFK_SYCL ) {
1706+ } else if (IsSYCL ) {
17031707 XOffloadTargetNoTriple =
1704- A->getOption ().matches (options::OPT_Xsycl_frontend);
1708+ A->getOption ().matches (options::OPT_Xsycl_frontend);
17051709 if (A->getOption ().matches (options::OPT_Xsycl_frontend_EQ)) {
17061710 // Passing device args: -Xsycl-target-frontend=<triple> -opt=val.
1707- if (getDriver ().getSYCLDeviceTriple (A->getValue (0 )) == getTriple () )
1711+ if (getDriver ().getSYCLDeviceTriple (A->getValue (0 )) == Triple )
17081712 Index = Args.getBaseArgs ().MakeIndex (A->getValue (1 ));
17091713 else
17101714 continue ;
@@ -1744,8 +1748,7 @@ llvm::opt::DerivedArgList *ToolChain::TranslateOffloadTargetArgs(
17441748 getDriver ().Diag (diag::err_drv_Xopenmp_target_missing_triple);
17451749 continue ;
17461750 }
1747- if (DeviceOffloadKind == Action::OFK_SYCL &&
1748- !SingleTargetTripleCount (options::OPT_fsycl_targets_EQ)) {
1751+ if (IsSYCL && !SingleTargetTripleCount (options::OPT_fsycl_targets_EQ)) {
17491752 getDriver ().Diag (diag::err_drv_Xsycl_target_missing_triple)
17501753 << A->getSpelling ();
17511754 continue ;
0 commit comments