From d3e5e8873904bd3c3742df980854829ad2bb0bcc Mon Sep 17 00:00:00 2001 From: foreman Date: Tue, 25 Oct 2016 16:22:19 -0400 Subject: [PATCH] P4 to Git Change 1331517 by lmoriche@lmoriche_opencl_dev on 2016/10/25 16:04:17 SWDEV-94610 - Automatically generate the get_oclc_isa_version(gfxip) and get_oclc_FUNC(on/off) functions. Affected files ... ... //depot/stg/opencl/drivers/opencl/library/build/Makefile.library#58 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palprogram.cpp#14 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprogram.cpp#42 edit --- rocclr/runtime/device/pal/palprogram.cpp | 96 +++++++---------------- rocclr/runtime/device/rocm/rocprogram.cpp | 89 ++++++--------------- 2 files changed, 51 insertions(+), 134 deletions(-) diff --git a/rocclr/runtime/device/pal/palprogram.cpp b/rocclr/runtime/device/pal/palprogram.cpp index dd564702bc..f3e1cd5147 100644 --- a/rocclr/runtime/device/pal/palprogram.cpp +++ b/rocclr/runtime/device/pal/palprogram.cpp @@ -1179,30 +1179,8 @@ LightningProgram::linkImpl(amd::option::Options *options) inputs.push_back(irif_bc); // open the control functions - std::pair isa_version; - switch (dev().hwInfo()->gfxipVersion_) { - case 700: isa_version = std::make_pair( - oclc_isa_version_700_amdgcn, oclc_isa_version_700_amdgcn_size); - break; - case 701: isa_version = std::make_pair( - oclc_isa_version_701_amdgcn, oclc_isa_version_701_amdgcn_size); - break; - case 800: isa_version = std::make_pair( - oclc_isa_version_800_amdgcn, oclc_isa_version_800_amdgcn_size); - break; - case 801: isa_version = std::make_pair( - oclc_isa_version_801_amdgcn, oclc_isa_version_801_amdgcn_size); - break; - case 802: isa_version = std::make_pair( - oclc_isa_version_802_amdgcn, oclc_isa_version_802_amdgcn_size); - break; - case 803: case 804: isa_version = std::make_pair( - oclc_isa_version_803_amdgcn, oclc_isa_version_803_amdgcn_size); - break; - case 810: isa_version = std::make_pair( - oclc_isa_version_810_amdgcn, oclc_isa_version_810_amdgcn_size); - break; - default: + auto isa_version = get_oclc_isa_version(dev().hwInfo()->gfxipVersion_); + if (!isa_version.first) { buildLog_ += "Error: Linking for this device is not supported\n"; return false; } @@ -1217,51 +1195,35 @@ LightningProgram::linkImpl(amd::option::Options *options) inputs.push_back(isa_version_bc); - auto correctly_rounded_sqrt = (options->oVariables->FP32RoundDivideSqrt) - ? std::make_pair( - oclc_correctly_rounded_sqrt_on_amdgcn, - oclc_correctly_rounded_sqrt_on_amdgcn_size) - : std::make_pair( - oclc_correctly_rounded_sqrt_off_amdgcn, - oclc_correctly_rounded_sqrt_off_amdgcn_size); - - auto daz_opt = (dev().hwInfo()->gfxipVersion_ < 900 - || options->oVariables->DenormsAreZero) - ? std::make_pair( - oclc_daz_opt_on_amdgcn, - oclc_daz_opt_on_amdgcn_size) - : std::make_pair( - oclc_daz_opt_off_amdgcn, - oclc_daz_opt_off_amdgcn_size); - - auto finite_only = (options->oVariables->FiniteMathOnly - || options->oVariables->FastRelaxedMath) - ? std::make_pair( - oclc_finite_only_on_amdgcn, - oclc_finite_only_on_amdgcn_size) - : std::make_pair( - oclc_finite_only_off_amdgcn, - oclc_finite_only_off_amdgcn_size); - - auto unsafe_math = (options->oVariables->UnsafeMathOpt - || options->oVariables->FastRelaxedMath) - ? std::make_pair( - oclc_unsafe_math_on_amdgcn, - oclc_unsafe_math_on_amdgcn_size) - : std::make_pair( - oclc_unsafe_math_off_amdgcn, - oclc_unsafe_math_off_amdgcn_size); - + auto correctly_rounded_sqrt = get_oclc_correctly_rounded_sqrt( + options->oVariables->FP32RoundDivideSqrt); Data* correctly_rounded_sqrt_bc = C->NewBufferReference(DT_LLVM_BC, - (const char*) correctly_rounded_sqrt.first, correctly_rounded_sqrt.second); - Data* daz_opt_bc = C->NewBufferReference(DT_LLVM_BC, - (const char*) daz_opt.first, daz_opt.second); - Data* finite_only_bc = C->NewBufferReference(DT_LLVM_BC, - (const char*) finite_only.first, finite_only.second); - Data* unsafe_math_bc = C->NewBufferReference(DT_LLVM_BC, - (const char*) unsafe_math.first, unsafe_math.second); + correctly_rounded_sqrt.first, correctly_rounded_sqrt.second); - if (!correctly_rounded_sqrt_bc || !daz_opt_bc || !finite_only_bc || !unsafe_math_bc) { + auto daz_opt = get_oclc_daz_opt(dev().hwInfo()->gfxipVersion_ < 900 + || options->oVariables->DenormsAreZero); + Data* daz_opt_bc = C->NewBufferReference(DT_LLVM_BC, + daz_opt.first, daz_opt.second); + + auto finite_only = get_oclc_finite_only(options->oVariables->FiniteMathOnly + || options->oVariables->FastRelaxedMath); + Data* finite_only_bc = C->NewBufferReference(DT_LLVM_BC, + finite_only.first, finite_only.second); + + auto unsafe_math = get_oclc_unsafe_math(options->oVariables->UnsafeMathOpt + || options->oVariables->FastRelaxedMath); + Data* unsafe_math_bc = C->NewBufferReference(DT_LLVM_BC, + unsafe_math.first, unsafe_math.second); + + if (!correctly_rounded_sqrt_bc || !daz_opt_bc + || !finite_only_bc || !unsafe_math_bc) { + buildLog_ += "Error: Failed to open the control functions.\n"; + return false; + } + + + if (!correctly_rounded_sqrt_bc || !daz_opt_bc + || !finite_only_bc || !unsafe_math_bc) { buildLog_ += "Error: Failed to open the control functions.\n"; return false; } diff --git a/rocclr/runtime/device/rocm/rocprogram.cpp b/rocclr/runtime/device/rocm/rocprogram.cpp index a14554de6b..ef741059dd 100644 --- a/rocclr/runtime/device/rocm/rocprogram.cpp +++ b/rocclr/runtime/device/rocm/rocprogram.cpp @@ -799,30 +799,8 @@ HSAILProgram::linkImpl_LC(amd::option::Options *options) inputs.push_back(irif_bc); // open the control functions - std::pair isa_version; - switch (dev().deviceInfo().gfxipVersion_) { - case 700: isa_version = std::make_pair( - oclc_isa_version_700_amdgcn, oclc_isa_version_700_amdgcn_size); - break; - case 701: isa_version = std::make_pair( - oclc_isa_version_701_amdgcn, oclc_isa_version_701_amdgcn_size); - break; - case 800: isa_version = std::make_pair( - oclc_isa_version_800_amdgcn, oclc_isa_version_800_amdgcn_size); - break; - case 801: isa_version = std::make_pair( - oclc_isa_version_801_amdgcn, oclc_isa_version_801_amdgcn_size); - break; - case 802: isa_version = std::make_pair( - oclc_isa_version_802_amdgcn, oclc_isa_version_802_amdgcn_size); - break; - case 803: isa_version = std::make_pair( - oclc_isa_version_803_amdgcn, oclc_isa_version_803_amdgcn_size); - break; - case 810: isa_version = std::make_pair( - oclc_isa_version_810_amdgcn, oclc_isa_version_810_amdgcn_size); - break; - default: + auto isa_version = get_oclc_isa_version(dev().deviceInfo().gfxipVersion_); + if (!isa_version.first) { buildLog_ += "Error: Linking for this device is not supported\n"; return false; } @@ -837,51 +815,28 @@ HSAILProgram::linkImpl_LC(amd::option::Options *options) inputs.push_back(isa_version_bc); - auto correctly_rounded_sqrt = (options->oVariables->FP32RoundDivideSqrt) - ? std::make_pair( - oclc_correctly_rounded_sqrt_on_amdgcn, - oclc_correctly_rounded_sqrt_on_amdgcn_size) - : std::make_pair( - oclc_correctly_rounded_sqrt_off_amdgcn, - oclc_correctly_rounded_sqrt_off_amdgcn_size); - - auto daz_opt = (dev().deviceInfo().gfxipVersion_ < 900 - || options->oVariables->DenormsAreZero) - ? std::make_pair( - oclc_daz_opt_on_amdgcn, - oclc_daz_opt_on_amdgcn_size) - : std::make_pair( - oclc_daz_opt_off_amdgcn, - oclc_daz_opt_off_amdgcn_size); - - auto finite_only = (options->oVariables->FiniteMathOnly - || options->oVariables->FastRelaxedMath) - ? std::make_pair( - oclc_finite_only_on_amdgcn, - oclc_finite_only_on_amdgcn_size) - : std::make_pair( - oclc_finite_only_off_amdgcn, - oclc_finite_only_off_amdgcn_size); - - auto unsafe_math = (options->oVariables->UnsafeMathOpt - || options->oVariables->FastRelaxedMath) - ? std::make_pair( - oclc_unsafe_math_on_amdgcn, - oclc_unsafe_math_on_amdgcn_size) - : std::make_pair( - oclc_unsafe_math_off_amdgcn, - oclc_unsafe_math_off_amdgcn_size); - + auto correctly_rounded_sqrt = get_oclc_correctly_rounded_sqrt( + options->oVariables->FP32RoundDivideSqrt); Data* correctly_rounded_sqrt_bc = C->NewBufferReference(DT_LLVM_BC, - (const char*) correctly_rounded_sqrt.first, correctly_rounded_sqrt.second); - Data* daz_opt_bc = C->NewBufferReference(DT_LLVM_BC, - (const char*) daz_opt.first, daz_opt.second); - Data* finite_only_bc = C->NewBufferReference(DT_LLVM_BC, - (const char*) finite_only.first, finite_only.second); - Data* unsafe_math_bc = C->NewBufferReference(DT_LLVM_BC, - (const char*) unsafe_math.first, unsafe_math.second); + correctly_rounded_sqrt.first, correctly_rounded_sqrt.second); - if (!correctly_rounded_sqrt_bc || !daz_opt_bc || !finite_only_bc || !unsafe_math_bc) { + auto daz_opt = get_oclc_daz_opt(dev().hwInfo()->gfxipVersion_ < 900 + || options->oVariables->DenormsAreZero); + Data* daz_opt_bc = C->NewBufferReference(DT_LLVM_BC, + daz_opt.first, daz_opt.second); + + auto finite_only = get_oclc_finite_only(options->oVariables->FiniteMathOnly + || options->oVariables->FastRelaxedMath); + Data* finite_only_bc = C->NewBufferReference(DT_LLVM_BC, + finite_only.first, finite_only.second); + + auto unsafe_math = get_oclc_unsafe_math(options->oVariables->UnsafeMathOpt + || options->oVariables->FastRelaxedMath); + Data* unsafe_math_bc = C->NewBufferReference(DT_LLVM_BC, + unsafe_math.first, unsafe_math.second); + + if (!correctly_rounded_sqrt_bc || !daz_opt_bc + || !finite_only_bc || !unsafe_math_bc) { buildLog_ += "Error: Failed to open the control functions.\n"; return false; }