r365666 - [clang] Preserve names of addrspacecast'ed values.
Author: vzakhari Date: Wed Jul 10 10:10:05 2019 New Revision: 365666 URL: http://llvm.org/viewvc/llvm-project?rev=365666&view=rev Log: [clang] Preserve names of addrspacecast'ed values. Differential Revision: https://reviews.llvm.org/D63846 Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp cfe/trunk/test/CodeGenCUDA/builtins-amdgcn.cu cfe/trunk/test/CodeGenOpenCL/address-spaces-conversions.cl cfe/trunk/test/CodeGenOpenCLCXX/address-space-deduction.cl cfe/trunk/test/CodeGenOpenCLCXX/addrspace-of-this.cl cfe/trunk/test/CodeGenOpenCLCXX/addrspace-operators.cl cfe/trunk/test/CodeGenOpenCLCXX/addrspace-references.cl cfe/trunk/test/CodeGenOpenCLCXX/template-address-spaces.cl Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=365666&r1=365665&r2=365666&view=diff == --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Wed Jul 10 10:10:05 2019 @@ -449,7 +449,9 @@ llvm::Value *TargetCodeGenInfo::performA // space, an address space conversion may end up as a bitcast. if (auto *C = dyn_cast(Src)) return performAddrSpaceCast(CGF.CGM, C, SrcAddr, DestAddr, DestTy); - return CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(Src, DestTy); + // Try to preserve the source's name to make IR more readable. + return CGF.Builder.CreatePointerBitCastOrAddrSpaceCast( + Src, DestTy, Src->hasName() ? Src->getName() + ".ascast" : ""); } llvm::Constant * Modified: cfe/trunk/test/CodeGenCUDA/builtins-amdgcn.cu URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCUDA/builtins-amdgcn.cu?rev=365666&r1=365665&r2=365666&view=diff == --- cfe/trunk/test/CodeGenCUDA/builtins-amdgcn.cu (original) +++ cfe/trunk/test/CodeGenCUDA/builtins-amdgcn.cu Wed Jul 10 10:10:05 2019 @@ -2,15 +2,15 @@ #include "Inputs/cuda.h" // CHECK-LABEL: @_Z16use_dispatch_ptrPi( -// CHECK: %2 = call i8 addrspace(4)* @llvm.amdgcn.dispatch.ptr() -// CHECK: %3 = addrspacecast i8 addrspace(4)* %2 to i8 addrspace(4)** +// CHECK: %[[PTR:.*]] = call i8 addrspace(4)* @llvm.amdgcn.dispatch.ptr() +// CHECK: %{{.*}} = addrspacecast i8 addrspace(4)* %[[PTR]] to i8 addrspace(4)** __global__ void use_dispatch_ptr(int* out) { const int* dispatch_ptr = (const int*)__builtin_amdgcn_dispatch_ptr(); *out = *dispatch_ptr; } // CHECK-LABEL: @_Z12test_ds_fmaxf( -// CHECK: call float @llvm.amdgcn.ds.fmax(float addrspace(3)* @_ZZ12test_ds_fmaxfE6shared, float %2, i32 0, i32 0, i1 false) +// CHECK: call float @llvm.amdgcn.ds.fmax(float addrspace(3)* @_ZZ12test_ds_fmaxfE6shared, float %{{[^,]*}}, i32 0, i32 0, i1 false) __global__ void test_ds_fmax(float src) { __shared__ float shared; Modified: cfe/trunk/test/CodeGenOpenCL/address-spaces-conversions.cl URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/address-spaces-conversions.cl?rev=365666&r1=365665&r2=365666&view=diff == --- cfe/trunk/test/CodeGenOpenCL/address-spaces-conversions.cl (original) +++ cfe/trunk/test/CodeGenOpenCL/address-spaces-conversions.cl Wed Jul 10 10:10:05 2019 @@ -13,7 +13,7 @@ void test(global int *arg_glob, generic // CHECK-NOFAKE-NOT: addrspacecast arg_gen = &var_priv; // implicit cast with obtaining adr, private -> generic - // CHECK: %{{[0-9]+}} = addrspacecast i32* %var_priv to i32 addrspace(4)* + // CHECK: %{{[._a-z0-9]+}} = addrspacecast i32* %{{[._a-z0-9]+}} to i32 addrspace(4)* // CHECK-NOFAKE-NOT: addrspacecast arg_glob = (global int *)arg_gen; // explicit cast Modified: cfe/trunk/test/CodeGenOpenCLCXX/address-space-deduction.cl URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCLCXX/address-space-deduction.cl?rev=365666&r1=365665&r2=365666&view=diff == --- cfe/trunk/test/CodeGenOpenCLCXX/address-space-deduction.cl (original) +++ cfe/trunk/test/CodeGenOpenCLCXX/address-space-deduction.cl Wed Jul 10 10:10:05 2019 @@ -29,7 +29,7 @@ int foo(int par, int PTR par_p){ int loc; //COMMON: %loc_p = alloca i32 addrspace(4)* //COMMON: %loc_p_const = alloca i32* - //COMMON: [[GAS:%[0-9]+]] = addrspacecast i32* %loc to i32 addrspace(4)* + //COMMON: [[GAS:%[._a-z0-9]*]] = addrspacecast i32* %loc to i32 addrspace(4)* //COMMON: store i32 addrspace(4)* [[GAS]], i32 addrspace(4)** %loc_p int PTR loc_p = ADR(loc); //COMMON: store i32* %loc, i32** %loc_p_const Modified: cfe/trunk/test/CodeGenOpenCLCXX/addrspace-of-this.cl URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCLCXX/addrspace-of-this.cl?rev=365666&r1=365665&r2=365666&view=diff == --- cfe/trunk
[clang] 3a1b075 - Define __SPIR__ macro for spir/spir64 targets.
Author: Vyacheslav Zakharin Date: 2020-06-03T12:36:21-07:00 New Revision: 3a1b07506c1fc6e6aee528289341aa0d0d806814 URL: https://github.com/llvm/llvm-project/commit/3a1b07506c1fc6e6aee528289341aa0d0d806814 DIFF: https://github.com/llvm/llvm-project/commit/3a1b07506c1fc6e6aee528289341aa0d0d806814.diff LOG: Define __SPIR__ macro for spir/spir64 targets. Differential Revision: https://reviews.llvm.org/D80655 Added: Modified: clang/lib/Basic/Targets/SPIR.cpp clang/test/Preprocessor/predefined-macros.c Removed: diff --git a/clang/lib/Basic/Targets/SPIR.cpp b/clang/lib/Basic/Targets/SPIR.cpp index a9b815d13bc1..9b7aab85314a 100644 --- a/clang/lib/Basic/Targets/SPIR.cpp +++ b/clang/lib/Basic/Targets/SPIR.cpp @@ -23,10 +23,12 @@ void SPIRTargetInfo::getTargetDefines(const LangOptions &Opts, void SPIR32TargetInfo::getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const { + SPIRTargetInfo::getTargetDefines(Opts, Builder); DefineStd(Builder, "SPIR32", Opts); } void SPIR64TargetInfo::getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const { + SPIRTargetInfo::getTargetDefines(Opts, Builder); DefineStd(Builder, "SPIR64", Opts); } diff --git a/clang/test/Preprocessor/predefined-macros.c b/clang/test/Preprocessor/predefined-macros.c index def105f4c52e..083f0e539d88 100644 --- a/clang/test/Preprocessor/predefined-macros.c +++ b/clang/test/Preprocessor/predefined-macros.c @@ -173,7 +173,17 @@ // RUN: %clang_cc1 %s -E -dM -o - -x cl -triple spir-unknown-unknown \ // RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-SPIR -// CHECK-SPIR: #define __IMAGE_SUPPORT__ 1 +// CHECK-SPIR-DAG: #define __IMAGE_SUPPORT__ 1 +// CHECK-SPIR-DAG: #define __SPIR__ 1 +// CHECK-SPIR-DAG: #define __SPIR32__ 1 +// CHECK-SPIR-NOT: #define __SPIR64__ 1 + +// RUN: %clang_cc1 %s -E -dM -o - -x cl -triple spir64-unknown-unknown \ +// RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-SPIR64 +// CHECK-SPIR64-DAG: #define __IMAGE_SUPPORT__ 1 +// CHECK-SPIR64-DAG: #define __SPIR__ 1 +// CHECK-SPIR64-DAG: #define __SPIR64__ 1 +// CHECK-SPIR64-NOT: #define __SPIR32__ 1 // RUN: %clang_cc1 %s -E -dM -o - -x hip -triple amdgcn-amd-amdhsa \ // RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-HIP ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 93d08ac - [clang-offload-wrapper] Add standard notes for ELF offload images
Author: Vyacheslav Zakharin Date: 2021-08-16T13:09:01-07:00 New Revision: 93d08acaacec951dbb302f77eeae51974985b6b2 URL: https://github.com/llvm/llvm-project/commit/93d08acaacec951dbb302f77eeae51974985b6b2 DIFF: https://github.com/llvm/llvm-project/commit/93d08acaacec951dbb302f77eeae51974985b6b2.diff LOG: [clang-offload-wrapper] Add standard notes for ELF offload images The patch adds ELF notes into SHT_NOTE sections of ELF offload images passed to clang-offload-wrapper. The new notes use a null-terminated "LLVMOMPOFFLOAD" note name. There are currently three types of notes: VERSION: a string (not null-terminated) representing the ELF offload image structure. The current version '1.0' does not put any restrictions on the structure of the image. If we ever need to come up with a common structure for ELF offload images (e.g. to be able to analyze the images in libomptarget in some standard way), then we will introduce new versions. PRODUCER: a vendor specific name of the producing toolchain. Upstream LLVM uses "LLVM" (not null-terminated). PRODUCER_VERSION: a vendor specific version of the producing toolchain. Upstream LLVM uses LLVM_VERSION_STRING with optional LLVM_REVISION. All three notes are not mandatory currently. Differential Revision: https://reviews.llvm.org/D99551 Added: clang/test/Driver/Inputs/empty-elf-template.yaml Modified: clang/test/Driver/clang-offload-wrapper.c clang/tools/clang-offload-wrapper/CMakeLists.txt clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp Removed: diff --git a/clang/test/Driver/Inputs/empty-elf-template.yaml b/clang/test/Driver/Inputs/empty-elf-template.yaml new file mode 100644 index 0..f77de07a430f6 --- /dev/null +++ b/clang/test/Driver/Inputs/empty-elf-template.yaml @@ -0,0 +1,5 @@ +--- !ELF +FileHeader: + Class: ELFCLASS[[BITS]] + Data: ELFDATA2[[ENCODING]] + Type: ET_REL diff --git a/clang/test/Driver/clang-offload-wrapper.c b/clang/test/Driver/clang-offload-wrapper.c index 9a36559e34dd7..c671d88209744 100644 --- a/clang/test/Driver/clang-offload-wrapper.c +++ b/clang/test/Driver/clang-offload-wrapper.c @@ -19,9 +19,10 @@ // // Check bitcode produced by the wrapper tool. // -// RUN: clang-offload-wrapper -target=x86_64-pc-linux-gnu -o %t.wrapper.bc %t.tgt +// RUN: clang-offload-wrapper -target=x86_64-pc-linux-gnu -o %t.wrapper.bc %t.tgt 2>&1 | FileCheck %s --check-prefix ELF-WARNING // RUN: llvm-dis %t.wrapper.bc -o - | FileCheck %s --check-prefix CHECK-IR +// ELF-WARNING: is not an ELF image, so notes cannot be added to it. // CHECK-IR: target triple = "x86_64-pc-linux-gnu" // CHECK-IR-DAG: [[ENTTY:%.+]] = type { i8*, i8*, i{{32|64}}, i32, i32 } @@ -53,3 +54,24 @@ // CHECK-IR: ret void // CHECK-IR: declare void @__tgt_unregister_lib([[DESCTY]]*) + +// Check that clang-offload-wrapper adds LLVMOMPOFFLOAD notes +// into the ELF offload images: +// RUN: yaml2obj %S/Inputs/empty-elf-template.yaml -o %t.64le -DBITS=64 -DENCODING=LSB +// RUN: clang-offload-wrapper -target=x86_64-pc-linux-gnu -o %t.wrapper.elf64le.bc %t.64le +// RUN: llvm-dis %t.wrapper.elf64le.bc -o - | FileCheck %s --check-prefix OMPNOTES +// RUN: yaml2obj %S/Inputs/empty-elf-template.yaml -o %t.64be -DBITS=64 -DENCODING=MSB +// RUN: clang-offload-wrapper -target=x86_64-pc-linux-gnu -o %t.wrapper.elf64be.bc %t.64be +// RUN: llvm-dis %t.wrapper.elf64be.bc -o - | FileCheck %s --check-prefix OMPNOTES +// RUN: yaml2obj %S/Inputs/empty-elf-template.yaml -o %t.32le -DBITS=32 -DENCODING=LSB +// RUN: clang-offload-wrapper -target=x86_64-pc-linux-gnu -o %t.wrapper.elf32le.bc %t.32le +// RUN: llvm-dis %t.wrapper.elf32le.bc -o - | FileCheck %s --check-prefix OMPNOTES +// RUN: yaml2obj %S/Inputs/empty-elf-template.yaml -o %t.32be -DBITS=32 -DENCODING=MSB +// RUN: clang-offload-wrapper -target=x86_64-pc-linux-gnu -o %t.wrapper.elf32be.bc %t.32be +// RUN: llvm-dis %t.wrapper.elf32be.bc -o - | FileCheck %s --check-prefix OMPNOTES + +// There is no clean way for extracting the offload image +// from the object file currently, so try to find +// the inserted ELF notes in the device image variable's +// initializer: +// OMPNOTES: @{{.+}} = internal unnamed_addr constant [{{[0-9]+}} x i8] c"{{.*}}LLVMOMPOFFLOAD{{.*}}LLVMOMPOFFLOAD{{.*}}LLVMOMPOFFLOAD{{.*}}" diff --git a/clang/tools/clang-offload-wrapper/CMakeLists.txt b/clang/tools/clang-offload-wrapper/CMakeLists.txt index 8bcb46267a37c..144edf5ab60c0 100644 --- a/clang/tools/clang-offload-wrapper/CMakeLists.txt +++ b/clang/tools/clang-offload-wrapper/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LLVM_LINK_COMPONENTS BitWriter Core Support TransformUtils) +set(LLVM_LINK_COMPONENTS BitWriter Core Object Support TransformUtils) add_clang_tool(clang-offload-wrapper ClangOffloadWrapper.cpp diff --git a/clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp b/clang/tools/clang-offload-wrap
[clang] 1ffbe8c - [clang-offload-wrapper] Disabled ELF offload notes embedding by default.
Author: Vyacheslav Zakharin Date: 2021-08-18T08:18:03-07:00 New Revision: 1ffbe8c04ff269ca9847c37036fbad943820d6ae URL: https://github.com/llvm/llvm-project/commit/1ffbe8c04ff269ca9847c37036fbad943820d6ae DIFF: https://github.com/llvm/llvm-project/commit/1ffbe8c04ff269ca9847c37036fbad943820d6ae.diff LOG: [clang-offload-wrapper] Disabled ELF offload notes embedding by default. This change-set puts 93d08acaacec951dbb302f77eeae51974985b6b2 functionality under -add-omp-offload-notes switch that is OFF by default. CUDA toolchain is not able to handle ELF images with LLVMOMPOFFLOAD notes for unknown reason (see https://reviews.llvm.org/D99551#2950272). I disable the ELF notes embedding until the CUDA issue is triaged and resolved. Differential Revision: https://reviews.llvm.org/D108246 Added: Modified: clang/test/Driver/clang-offload-wrapper.c clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp Removed: diff --git a/clang/test/Driver/clang-offload-wrapper.c b/clang/test/Driver/clang-offload-wrapper.c index c671d88209744..1c84072fef80a 100644 --- a/clang/test/Driver/clang-offload-wrapper.c +++ b/clang/test/Driver/clang-offload-wrapper.c @@ -19,7 +19,7 @@ // // Check bitcode produced by the wrapper tool. // -// RUN: clang-offload-wrapper -target=x86_64-pc-linux-gnu -o %t.wrapper.bc %t.tgt 2>&1 | FileCheck %s --check-prefix ELF-WARNING +// RUN: clang-offload-wrapper -add-omp-offload-notes -target=x86_64-pc-linux-gnu -o %t.wrapper.bc %t.tgt 2>&1 | FileCheck %s --check-prefix ELF-WARNING // RUN: llvm-dis %t.wrapper.bc -o - | FileCheck %s --check-prefix CHECK-IR // ELF-WARNING: is not an ELF image, so notes cannot be added to it. @@ -58,16 +58,16 @@ // Check that clang-offload-wrapper adds LLVMOMPOFFLOAD notes // into the ELF offload images: // RUN: yaml2obj %S/Inputs/empty-elf-template.yaml -o %t.64le -DBITS=64 -DENCODING=LSB -// RUN: clang-offload-wrapper -target=x86_64-pc-linux-gnu -o %t.wrapper.elf64le.bc %t.64le +// RUN: clang-offload-wrapper -add-omp-offload-notes -target=x86_64-pc-linux-gnu -o %t.wrapper.elf64le.bc %t.64le // RUN: llvm-dis %t.wrapper.elf64le.bc -o - | FileCheck %s --check-prefix OMPNOTES // RUN: yaml2obj %S/Inputs/empty-elf-template.yaml -o %t.64be -DBITS=64 -DENCODING=MSB -// RUN: clang-offload-wrapper -target=x86_64-pc-linux-gnu -o %t.wrapper.elf64be.bc %t.64be +// RUN: clang-offload-wrapper -add-omp-offload-notes -target=x86_64-pc-linux-gnu -o %t.wrapper.elf64be.bc %t.64be // RUN: llvm-dis %t.wrapper.elf64be.bc -o - | FileCheck %s --check-prefix OMPNOTES // RUN: yaml2obj %S/Inputs/empty-elf-template.yaml -o %t.32le -DBITS=32 -DENCODING=LSB -// RUN: clang-offload-wrapper -target=x86_64-pc-linux-gnu -o %t.wrapper.elf32le.bc %t.32le +// RUN: clang-offload-wrapper -add-omp-offload-notes -target=x86_64-pc-linux-gnu -o %t.wrapper.elf32le.bc %t.32le // RUN: llvm-dis %t.wrapper.elf32le.bc -o - | FileCheck %s --check-prefix OMPNOTES // RUN: yaml2obj %S/Inputs/empty-elf-template.yaml -o %t.32be -DBITS=32 -DENCODING=MSB -// RUN: clang-offload-wrapper -target=x86_64-pc-linux-gnu -o %t.wrapper.elf32be.bc %t.32be +// RUN: clang-offload-wrapper -add-omp-offload-notes -target=x86_64-pc-linux-gnu -o %t.wrapper.elf32be.bc %t.32be // RUN: llvm-dis %t.wrapper.elf32be.bc -o - | FileCheck %s --check-prefix OMPNOTES // There is no clean way for extracting the offload image diff --git a/clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp b/clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp index bbadd909089e3..b86a927010eb2 100644 --- a/clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp +++ b/clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp @@ -76,6 +76,10 @@ static cl::opt SaveTemps( "This option forces print-out of the temporary files' names."), cl::Hidden); +static cl::opt AddOpenMPOffloadNotes( +"add-omp-offload-notes", +cl::desc("Add LLVMOMPOFFLOAD ELF notes to ELF device images."), cl::Hidden); + namespace { class BinaryWrapper { @@ -630,7 +634,7 @@ int main(int argc, const char **argv) { return 1; } std::unique_ptr Buffer(std::move(*BufOrErr)); -if (File != "-") { +if (File != "-" && AddOpenMPOffloadNotes) { // Adding ELF notes for STDIN is not supported yet. Buffer = Wrapper.addELFNotes(std::move(Buffer), File); } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 2e192ab - [CodeExtractor] Preserve topological order for the return blocks.
Author: Vyacheslav Zakharin Date: 2021-08-25T08:09:01-07:00 New Revision: 2e192ab1f457918484d3f41b9d2271a9dd8a9de3 URL: https://github.com/llvm/llvm-project/commit/2e192ab1f457918484d3f41b9d2271a9dd8a9de3 DIFF: https://github.com/llvm/llvm-project/commit/2e192ab1f457918484d3f41b9d2271a9dd8a9de3.diff LOG: [CodeExtractor] Preserve topological order for the return blocks. Differential Revision: https://reviews.llvm.org/D108673 Added: Modified: clang/test/OpenMP/cancel_codegen.cpp clang/test/OpenMP/parallel_codegen.cpp llvm/lib/Transforms/IPO/IROutliner.cpp llvm/lib/Transforms/Utils/CodeExtractor.cpp llvm/test/Transforms/CodeExtractor/LoopExtractor.ll llvm/test/Transforms/CodeExtractor/LoopExtractor_crash.ll llvm/test/Transforms/CodeExtractor/LoopExtractor_infinite.ll llvm/test/Transforms/CodeExtractor/live_shrink_unsafe.ll llvm/test/Transforms/CodeExtractor/unreachable-block.ll llvm/test/Transforms/HotColdSplit/multiple-exits.ll llvm/test/Transforms/IROutliner/outlining-different-output-blocks.ll llvm/test/Transforms/IROutliner/outlining-same-output-blocks.ll llvm/test/Transforms/OpenMP/parallel_region_merging.ll llvm/test/tools/llvm-extract/extract-blocks-with-groups.ll Removed: diff --git a/clang/test/OpenMP/cancel_codegen.cpp b/clang/test/OpenMP/cancel_codegen.cpp index 2b7c1d6d254d7..d87dee6184b0d 100644 --- a/clang/test/OpenMP/cancel_codegen.cpp +++ b/clang/test/OpenMP/cancel_codegen.cpp @@ -1560,8 +1560,6 @@ for (int i = 0; i < argc; ++i) { // CHECK3-NEXT:store i32 [[TMP0]], i32* [[TID_ADDR_LOCAL]], align 4 // CHECK3-NEXT:[[TID:%.*]] = load i32, i32* [[TID_ADDR_LOCAL]], align 4 // CHECK3-NEXT:br label [[OMP_PAR_REGION:%.*]] -// CHECK3: omp.par.outlined.exit.exitStub: -// CHECK3-NEXT:ret void // CHECK3: omp.par.region: // CHECK3-NEXT:[[TMP1:%.*]] = load float, float* @flag, align 4 // CHECK3-NEXT:[[TOBOOL:%.*]] = fcmp une float [[TMP1]], 0.00e+00 @@ -1607,6 +1605,8 @@ for (int i = 0; i < argc; ++i) { // CHECK3-NEXT:br label [[OMP_PAR_OUTLINED_EXIT_EXITSTUB]] // CHECK3: .split: // CHECK3-NEXT:br label [[TMP3]] +// CHECK3: omp.par.outlined.exit.exitStub: +// CHECK3-NEXT:ret void // // // CHECK3-LABEL: define {{[^@]+}}@.omp_task_entry. @@ -2187,8 +2187,6 @@ for (int i = 0; i < argc; ++i) { // CHECK4-NEXT:store i32 [[TMP0]], i32* [[TID_ADDR_LOCAL]], align 4 // CHECK4-NEXT:[[TID:%.*]] = load i32, i32* [[TID_ADDR_LOCAL]], align 4 // CHECK4-NEXT:br label [[OMP_PAR_REGION:%.*]] -// CHECK4: omp.par.outlined.exit.exitStub: -// CHECK4-NEXT:ret void // CHECK4: omp.par.region: // CHECK4-NEXT:[[TMP1:%.*]] = load float, float* @flag, align 4 // CHECK4-NEXT:[[TOBOOL:%.*]] = fcmp une float [[TMP1]], 0.00e+00 @@ -2234,6 +2232,8 @@ for (int i = 0; i < argc; ++i) { // CHECK4-NEXT:br label [[OMP_PAR_OUTLINED_EXIT_EXITSTUB]] // CHECK4: .split: // CHECK4-NEXT:br label [[TMP3]] +// CHECK4: omp.par.outlined.exit.exitStub: +// CHECK4-NEXT:ret void // // // CHECK4-LABEL: define {{[^@]+}}@.omp_task_entry. @@ -4054,8 +4054,6 @@ for (int i = 0; i < argc; ++i) { // CHECK9-NEXT:store i32 [[TMP0]], i32* [[TID_ADDR_LOCAL]], align 4 // CHECK9-NEXT:[[TID:%.*]] = load i32, i32* [[TID_ADDR_LOCAL]], align 4 // CHECK9-NEXT:br label [[OMP_PAR_REGION:%.*]] -// CHECK9: omp.par.outlined.exit.exitStub: -// CHECK9-NEXT:ret void // CHECK9: omp.par.region: // CHECK9-NEXT:[[TMP1:%.*]] = load float, float* @flag, align 4 // CHECK9-NEXT:[[TOBOOL:%.*]] = fcmp une float [[TMP1]], 0.00e+00 @@ -4101,6 +4099,8 @@ for (int i = 0; i < argc; ++i) { // CHECK9-NEXT:br label [[OMP_PAR_OUTLINED_EXIT_EXITSTUB]] // CHECK9: .split: // CHECK9-NEXT:br label [[TMP3]] +// CHECK9: omp.par.outlined.exit.exitStub: +// CHECK9-NEXT:ret void // // // CHECK9-LABEL: define {{[^@]+}}@.omp_task_entry. @@ -4681,8 +4681,6 @@ for (int i = 0; i < argc; ++i) { // CHECK10-NEXT:store i32 [[TMP0]], i32* [[TID_ADDR_LOCAL]], align 4 // CHECK10-NEXT:[[TID:%.*]] = load i32, i32* [[TID_ADDR_LOCAL]], align 4 // CHECK10-NEXT:br label [[OMP_PAR_REGION:%.*]] -// CHECK10: omp.par.outlined.exit.exitStub: -// CHECK10-NEXT:ret void // CHECK10: omp.par.region: // CHECK10-NEXT:[[TMP1:%.*]] = load float, float* @flag, align 4 // CHECK10-NEXT:[[TOBOOL:%.*]] = fcmp une float [[TMP1]], 0.00e+00 @@ -4728,6 +4726,8 @@ for (int i = 0; i < argc; ++i) { // CHECK10-NEXT:br label [[OMP_PAR_OUTLINED_EXIT_EXITSTUB]] // CHECK10: .split: // CHECK10-NEXT:br label [[TMP3]] +// CHECK10: omp.par.outlined.exit.exitStub: +// CHECK10-NEXT:ret void // // // CHECK10-LABEL: define {{[^@]+}}@.omp_task_entry. diff --git a/clang/test/OpenMP/parallel_codegen.cpp b/clang/te