diff --git a/clang/include/clang/Driver/Types.def b/clang/include/clang/Driver/Types.def index 716b72dc59df0..c29ed416e0c72 100644 --- a/clang/include/clang/Driver/Types.def +++ b/clang/include/clang/Driver/Types.def @@ -108,7 +108,6 @@ TYPE("tempAOCOfilelist", TempAOCOfilelist, INVALID, "txt", phases TYPE("archive", Archive, INVALID, "a", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("wholearchive", WholeArchive, INVALID, "a", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("fpga_aocx", FPGA_AOCX, INVALID, "aocx", phases::Compile, phases::Backend, phases::Assemble, phases::Link) -TYPE("fpga_aocx_emu", FPGA_AOCX_EMU, INVALID, "aocx", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("fpga_aocr", FPGA_AOCR, INVALID, "aocr", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("fpga_aocr_emu", FPGA_AOCR_EMU, INVALID, "aocr", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("fpga_aoco", FPGA_AOCO, INVALID, "aoco", phases::Compile, phases::Backend, phases::Assemble, phases::Link) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index fb2ec73acaf4a..73fddf31f6c19 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -4342,8 +4342,7 @@ class OffloadingActionBuilder final { // Generate AOCX/AOCR FPGAAOTAction = C.MakeAction(Input, FPGAOutType); - else if (Input->getType() == types::TY_FPGA_AOCX || - Input->getType() == types::TY_FPGA_AOCX_EMU) + else if (Input->getType() == types::TY_FPGA_AOCX) FPGAAOTAction = Input; else llvm_unreachable("Unexpected FPGA input type."); @@ -4705,7 +4704,7 @@ class OffloadingActionBuilder final { if (C.getDriver().isFPGAEmulationMode()) FPGAOutType = (A->getValue() == StringRef("early")) ? types::TY_FPGA_AOCR_EMU - : types::TY_FPGA_AOCX_EMU; + : types::TY_FPGA_AOCX; } // Populate FPGA static archives that could contain dep files to be @@ -4866,17 +4865,21 @@ class OffloadingActionBuilder final { D.Diag(clang::diag::warn_drv_mismatch_fpga_archive) << InputName; }; // Type FPGA aoco is a special case for static archives - if (A->getType() == types::TY_FPGA_AOCO && !IsFPGAEmulation) { + if (A->getType() == types::TY_FPGA_AOCO) { if (!hasFPGABinary(C, InputName, types::TY_FPGA_AOCO)) return false; A = C.MakeAction(*InputArg, types::TY_FPGA_AOCO); return true; } + // Type FPGA aocx is considered the same way for Hardware and Emulation. + if (hasFPGABinary(C, InputName, types::TY_FPGA_AOCX)) { + A = C.MakeAction(*InputArg, types::TY_FPGA_AOCX); + return true; + } + SmallVector, 4> FPGAAOCTypes = { - {types::TY_FPGA_AOCX, false}, {types::TY_FPGA_AOCR, false}, - {types::TY_FPGA_AOCX_EMU, true}, {types::TY_FPGA_AOCR_EMU, true}}; for (const auto &ArchiveType : FPGAAOCTypes) { bool BinaryFound = hasFPGABinary(C, InputName, ArchiveType.first); @@ -4900,8 +4903,7 @@ class OffloadingActionBuilder final { return true; // An FPGA AOCX input does not have a host dependence to the unbundler - if (HostAction->getType() == types::TY_FPGA_AOCX || - HostAction->getType() == types::TY_FPGA_AOCX_EMU) + if (HostAction->getType() == types::TY_FPGA_AOCX) return false; // If we are supporting bundling/unbundling and the current action is an @@ -4967,8 +4969,7 @@ class OffloadingActionBuilder final { if ((OffloadKind == Action::OFK_None && CanUseBundler) || (HasFPGATarget && ((Args.hasArg(options::OPT_fsycl_link_EQ) && HostAction->getType() == types::TY_Object) || - HostAction->getType() == types::TY_FPGA_AOCX || - HostAction->getType() == types::TY_FPGA_AOCX_EMU))) + HostAction->getType() == types::TY_FPGA_AOCX))) if (auto *UA = dyn_cast(HostAction)) HostAction = UA->getInputs().back(); @@ -5436,7 +5437,6 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args, // that in a data structure for reference. if (hasFPGABinary(C, LA.str(), types::TY_FPGA_AOCX) || hasFPGABinary(C, LA.str(), types::TY_FPGA_AOCR) || - hasFPGABinary(C, LA.str(), types::TY_FPGA_AOCX_EMU) || hasFPGABinary(C, LA.str(), types::TY_FPGA_AOCR_EMU)) continue; // For offload-static-libs we add an unbundling action for each static @@ -5473,8 +5473,7 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args, if (auto *IA = dyn_cast(LI)) { if (IA->getType() == types::TY_FPGA_AOCR || IA->getType() == types::TY_FPGA_AOCX || - IA->getType() == types::TY_FPGA_AOCR_EMU || - IA->getType() == types::TY_FPGA_AOCX_EMU) { + IA->getType() == types::TY_FPGA_AOCR_EMU) { // Add to unbundler. UnbundlerInput = LI; } else { diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index df01fe9c93c5e..54aaefa0208ba 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -8237,7 +8237,6 @@ void OffloadBundler::ConstructJobMultipleOutputs( bool IsFPGADepLibUnbundle = JA.getType() == types::TY_FPGA_Dependencies_List; if (InputType == types::TY_FPGA_AOCX || InputType == types::TY_FPGA_AOCR || - InputType == types::TY_FPGA_AOCX_EMU || InputType == types::TY_FPGA_AOCR_EMU) { // Override type with AOCX/AOCR which will unbundle to a list containing // binaries with the appropriate file extension (.aocx/.aocr). @@ -8246,11 +8245,9 @@ void OffloadBundler::ConstructJobMultipleOutputs( // better in the output extension and type for improved understanding // of file contents and debuggability. if (getToolChain().getTriple().getSubArch() == - llvm::Triple::SPIRSubArch_fpga) { - bool isAOCX = InputType == types::TY_FPGA_AOCX || - InputType == types::TY_FPGA_AOCX_EMU; - TypeArg = isAOCX ? "aocx" : "aocr"; - } else + llvm::Triple::SPIRSubArch_fpga) + TypeArg = (InputType == types::TY_FPGA_AOCX) ? "aocx" : "aocr"; + else TypeArg = "aoo"; } if (InputType == types::TY_FPGA_AOCO || IsFPGADepLibUnbundle) @@ -8401,8 +8398,9 @@ void OffloadWrapper::ConstructJob(Compilation &C, const JobAction &JA, TCArgs.hasArg(options::OPT_fsycl_link_EQ)) { SmallString<16> FPGAArch("fpga_"); auto *A = C.getInputArgs().getLastArg(options::OPT_fsycl_link_EQ); - FPGAArch += A->getValue() == StringRef("early") ? "aocr" : "aocx"; - if (C.getDriver().isFPGAEmulationMode()) + bool Early = (A->getValue() == StringRef("early")); + FPGAArch += Early ? "aocr" : "aocx"; + if (C.getDriver().isFPGAEmulationMode() && Early) FPGAArch += "_emu"; TT.setArchName(FPGAArch); TT.setVendorName("intel"); diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index 9ea85e8d10f5c..64d036de1d98e 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -237,7 +237,6 @@ bool types::isFPGA(ID Id) { case TY_FPGA_AOCX: case TY_FPGA_AOCO: case TY_FPGA_AOCR_EMU: - case TY_FPGA_AOCX_EMU: return true; } } diff --git a/clang/test/Driver/sycl-offload-intelfpga-emu.cpp b/clang/test/Driver/sycl-offload-intelfpga-emu.cpp index d0b21760dcb1b..36ecb41d1a584 100644 --- a/clang/test/Driver/sycl-offload-intelfpga-emu.cpp +++ b/clang/test/Driver/sycl-offload-intelfpga-emu.cpp @@ -64,7 +64,7 @@ // CHK-FPGA-LINK-LIB: clang-offload-bundler{{.*}} "-type=aocr" "-targets=sycl-fpga_aocr_emu-intel-unknown-sycldevice" "-inputs=[[INPUT:.+\.a]]" "-outputs=[[OUTPUT2:.+\.aocr]]" "-unbundle" // CHK-FPGA-LINK-LIB-IMAGE: llvm-foreach{{.*}} "--out-ext=aocx" "--in-file-list=[[OUTPUT2]]" "--in-replace=[[OUTPUT2]]" "--out-file-list=[[OUTPUT3:.+\.aocx]]" "--out-replace=[[OUTPUT3]]" "--" "{{.*}}opencl-aot{{.*}} "-device=fpga_fast_emu" "-spv=[[OUTPUT2]]" "-ir=[[OUTPUT3]]" "--bo=-g" // CHK-FPGA-LINK-LIB-IMAGE: file-table-tform{{.*}} "-rename=0,Code" "-o" "[[OUTPUT4:.+\.txt]]" "[[OUTPUT3]]" -// CHK-FPGA-LINK-LIB-IMAGE: clang-offload-wrapper{{.*}} "-host=x86_64-unknown-linux-gnu" "--emit-reg-funcs=0" "-target=fpga_aocx_emu-intel-unknown-sycldevice" "-kind=sycl" "-batch" "[[OUTPUT4]]" +// CHK-FPGA-LINK-LIB-IMAGE: clang-offload-wrapper{{.*}} "-host=x86_64-unknown-linux-gnu" "--emit-reg-funcs=0" "-target=fpga_aocx-intel-unknown-sycldevice" "-kind=sycl" "-batch" "[[OUTPUT4]]" // CHK-FPGA-LINK-LIB-EARLY: llvm-foreach{{.*}} "--out-ext=aocr" "--in-file-list=[[OUTPUT2]]" "--in-replace=[[OUTPUT2]]" "--out-file-list=[[OUTPUT3:.+\.aocr]]" "--out-replace=[[OUTPUT3]]" "--" "{{.*}}opencl-aot{{.*}} "-device=fpga_fast_emu" "-spv=[[OUTPUT2]]" "-ir=[[OUTPUT3]]" "--bo=-g" // CHK-FPGA-LINK-LIB-EARLY: file-table-tform{{.*}} "-rename=0,Code" "-o" "[[OUTPUT4:.+\.txt]]" "[[OUTPUT3]]" // CHK-FPGA-LINK-LIB-EARLY: clang-offload-wrapper{{.*}} "-host=x86_64-unknown-linux-gnu" "-target=fpga_aocr_emu-intel-unknown-sycldevice" "-kind=sycl" "-batch" "[[OUTPUT4]]" @@ -107,16 +107,16 @@ // RUN: echo "Dummy AOCX image" > %t.aocx // RUN: echo "void foo() {}" > %t.c // RUN: %clang -c -o %t.o %t.c -// RUN: clang-offload-wrapper -o %t-aocx.bc -host=x86_64-unknown-linux-gnu -kind=sycl -target=fpga_aocx_emu-intel-unknown-sycldevice %t.aocx +// RUN: clang-offload-wrapper -o %t-aocx.bc -host=x86_64-unknown-linux-gnu -kind=sycl -target=fpga_aocx-intel-unknown-sycldevice %t.aocx // RUN: llc -filetype=obj -o %t-aocx.o %t-aocx.bc // RUN: llvm-ar crv %t_aocx.a %t.o %t-aocx.o // RUN: %clangxx -target x86_64-unknown-linux-gnu -fsycl -fintelfpga %t_aocx.a -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-PHASES %s // RUN: %clang_cl -fsycl -fintelfpga %t_aocx.a -ccc-print-phases 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-PHASES %s -// CHK-FPGA-AOCX-PHASES: 0: input, "{{.*}}", fpga_aocx_emu, (host-sycl) +// CHK-FPGA-AOCX-PHASES: 0: input, "{{.*}}", fpga_aocx, (host-sycl) // CHK-FPGA-AOCX-PHASES: 1: linker, {0}, image, (host-sycl) -// CHK-FPGA-AOCX-PHASES: 2: clang-offload-unbundler, {0}, fpga_aocx_emu +// CHK-FPGA-AOCX-PHASES: 2: clang-offload-unbundler, {0}, fpga_aocx // CHK-FPGA-AOCX-PHASES: 3: file-table-tform, {2}, tempfilelist, (device-sycl) // CHK-FPGA-AOCX-PHASES: 4: clang-offload-wrapper, {3}, object, (device-sycl) // CHK-FPGA-AOCX-PHASES: 5: offload, "host-sycl ({{.*}}x86_64{{.*}})" {1}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {4}, image @@ -125,7 +125,7 @@ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX,CHK-FPGA-AOCX-LIN %s // RUN: %clang_cl -fsycl -fintelfpga %t_aocx.a -### 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX,CHK-FPGA-AOCX-WIN %s -// CHK-FPGA-AOCX: clang-offload-bundler{{.*}} "-type=aocx" "-targets=sycl-fpga_aocx_emu-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle" +// CHK-FPGA-AOCX: clang-offload-bundler{{.*}} "-type=aocx" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle" // CHK-FPGA-AOCX: file-table-tform{{.*}} "-rename=0,Code" "-o" "[[TABLEOUT:.+\.txt]]" "[[BUNDLEOUT]]" // CHK-FPGA-AOCX: clang-offload-wrapper{{.*}} "-o=[[WRAPOUT:.+\.bc]]" {{.*}} "-target=spir64_fpga" "-kind=sycl" "-batch" "[[TABLEOUT]]" // CHK-FPGA-AOCX-LIN: llc{{.*}} "-filetype=obj" "-o" "[[LLCOUT:.+\.o]]" "[[WRAPOUT]]" @@ -139,7 +139,7 @@ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-SRC,CHK-FPGA-AOCX-SRC-LIN %s // RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga %s %t_aocx.a -### 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-SRC,CHK-FPGA-AOCX-SRC-WIN %s -// CHK-FPGA-AOCX-SRC: clang-offload-bundler{{.*}} "-type=aocx" "-targets=sycl-fpga_aocx_emu-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle" +// CHK-FPGA-AOCX-SRC: clang-offload-bundler{{.*}} "-type=aocx" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle" // CHK-FPGA-AOCX-SRC: file-table-tform{{.*}} "-rename=0,Code" "-o" "[[TABLEOUT:.+\.txt]]" "[[BUNDLEOUT]]" // CHK-FPGA-AOCX-SRC: clang-offload-wrapper{{.*}} "-o=[[WRAPOUT:.+\.bc]]" {{.*}} "-target=spir64_fpga" "-kind=sycl" "-batch" "[[TABLEOUT]]" // CHK-FPGA-AOCX-SRC: llc{{.*}} "-filetype=obj" "-o" "[[LLCOUT:.+\.(o|obj)]]" "[[WRAPOUT]]" @@ -162,7 +162,7 @@ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-OBJ,CHK-FPGA-AOCX-OBJ-LIN %s // RUN: %clang_cl -fsycl -fno-sycl-device-lib=all -fintelfpga %t.o %t_aocx.a -### 2>&1 \ // RUN: | FileCheck -check-prefixes=CHK-FPGA-AOCX-OBJ,CHK-FPGA-AOCX-OBJ-WIN %s -// CHK-FPGA-AOCX-OBJ: clang-offload-bundler{{.*}} "-type=aocx" "-targets=sycl-fpga_aocx_emu-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle" +// CHK-FPGA-AOCX-OBJ: clang-offload-bundler{{.*}} "-type=aocx" "-targets=sycl-fpga_aocx-intel-unknown-sycldevice" "-inputs=[[LIBINPUT:.+\.a]]" "-outputs=[[BUNDLEOUT:.+\.aocx]]" "-unbundle" // CHK-FPGA-AOCX-OBJ: file-table-tform{{.*}} "-rename=0,Code" "-o" "[[TABLEOUT:.+\.txt]]" "[[BUNDLEOUT]]" // CHK-FPGA-AOCX-OBJ: clang-offload-wrapper{{.*}} "-o=[[WRAPOUT:.+\.bc]]" {{.*}} "-target=spir64_fpga" "-kind=sycl" "-batch" "[[TABLEOUT]]" // CHK-FPGA-AOCX-OBJ: llc{{.*}} "-filetype=obj" "-o" "[[LLCOUT:.+\.(o|obj)]]" "[[WRAPOUT]]" @@ -207,12 +207,6 @@ // CHK-FPGA-LINK-SRC: 20: clang-offload-wrapper, {19}, object, (device-sycl) // CHK-FPGA-LINK-SRC: 21: offload, "host-sycl (x86_64-unknown-linux-gnu)" {13}, "device-sycl (spir64_fpga-unknown-unknown-sycldevice)" {20}, archive -/// Check the warning's emission for conflicting emulation/hardware (AOCX) -// RUN: touch %t_aocx.a -// RUN: %clangxx -fsycl -fintelfpga -fsycl-link=image -target x86_64-unknown-linux-gnu %t_aocx.a %s -Xshardware -### 2>&1 \ -// RUN: | FileCheck %s --check-prefix=CHK-FPGA-LINK-WARN-AOCX -// CHK-FPGA-LINK-WARN-AOCX: warning: FPGA archive '{{.*}}_aocx.a' does not contain matching emulation/hardware expectancy - /// Check for implied options with emulation (-g -O0) // RUN: %clang -### -target x86_64-unknown-linux-gnu -fsycl -fintelfpga -g -O0 -Xs "-DFOO1 -DFOO2" %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-TOOLS-IMPLIED-OPTS %s diff --git a/clang/test/Driver/sycl-offload-intelfpga.cpp b/clang/test/Driver/sycl-offload-intelfpga.cpp index 1a035f866b5e7..0b3f3caf418b4 100644 --- a/clang/test/Driver/sycl-offload-intelfpga.cpp +++ b/clang/test/Driver/sycl-offload-intelfpga.cpp @@ -411,9 +411,3 @@ // CHK-TOOLS-IMPLIED-OPTS-NOT: clang{{.*}} "-fsycl-is-device"{{.*}} "-O0" // CHK-TOOLS-IMPLIED-OPTS: sycl-post-link{{.*}} "-O2" // CHK-TOOLS-IMPLIED-OPTS: aoc{{.*}} "-g" "-DFOO1" "-DFOO2" - -/// Check the warning's emission for conflicting emulation/hardware (AOCX) -// RUN: touch %t_aocx.a -// RUN: %clangxx -fsycl -fintelfpga -fsycl-link=image -target x86_64-unknown-linux-gnu %t_aocx.a %s -### 2>&1 \ -// RUN: | FileCheck %s --check-prefix=CHK-FPGA-LINK-WARN-AOCX -// CHK-FPGA-LINK-WARN-AOCX: warning: FPGA archive '{{.*}}_aocx.a' does not contain matching emulation/hardware expectancy