16948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar//===-------------------------- TargetRecip.cpp ---------------------------===// 26948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// 36948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// The LLVM Compiler Infrastructure 46948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// 56948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source 66948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// License. See LICENSE.TXT for details. 76948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// 86948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar//===----------------------------------------------------------------------===// 96948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// 106948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// This class is used to customize machine-specific reciprocal estimate code 116948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// generation in a target-independent way. 126948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// If a target does not support operations in this specification, then code 136948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// generation will default to using supported operations. 146948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// 156948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar//===----------------------------------------------------------------------===// 166948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 17de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/Target/TargetRecip.h" 186948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar#include "llvm/ADT/STLExtras.h" 19de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/ADT/StringRef.h" 206948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar#include "llvm/Support/ErrorHandling.h" 216948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 226948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainarusing namespace llvm; 236948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 246948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// These are the names of the individual reciprocal operations. These are 256948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// the key strings for queries and command-line inputs. 266948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// In addition, the command-line interface recognizes the global parameters 276948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// "all", "none", and "default". 28f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarstatic const char *const RecipOps[] = { 296948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar "divd", 306948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar "divf", 316948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar "vec-divd", 326948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar "vec-divf", 336948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar "sqrtd", 346948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar "sqrtf", 356948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar "vec-sqrtd", 366948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar "vec-sqrtf", 376948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar}; 386948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 396948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// The uninitialized state is needed for the enabled settings and refinement 406948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// steps because custom settings may arrive via the command-line before target 416948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar// defaults are set. 426948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga NainarTargetRecip::TargetRecip() { 436948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar unsigned NumStrings = llvm::array_lengthof(RecipOps); 446948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar for (unsigned i = 0; i < NumStrings; ++i) 456948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar RecipMap.insert(std::make_pair(RecipOps[i], RecipParams())); 466948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar} 476948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 48f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarstatic bool parseRefinementStep(StringRef In, size_t &Position, 496948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar uint8_t &Value) { 506948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar const char RefStepToken = ':'; 516948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar Position = In.find(RefStepToken); 526948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (Position == StringRef::npos) 536948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return false; 546948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 556948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar StringRef RefStepString = In.substr(Position + 1); 566948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // Allow exactly one numeric character for the additional refinement 576948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // step parameter. 586948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (RefStepString.size() == 1) { 596948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar char RefStepChar = RefStepString[0]; 606948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (RefStepChar >= '0' && RefStepChar <= '9') { 616948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar Value = RefStepChar - '0'; 626948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return true; 636948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 646948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 656948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar report_fatal_error("Invalid refinement step for -recip."); 666948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar} 676948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 686948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainarbool TargetRecip::parseGlobalParams(const std::string &Arg) { 696948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar StringRef ArgSub = Arg; 706948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 716948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // Look for an optional setting of the number of refinement steps needed 726948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // for this type of reciprocal operation. 736948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar size_t RefPos; 746948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar uint8_t RefSteps; 756948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar StringRef RefStepString; 766948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (parseRefinementStep(ArgSub, RefPos, RefSteps)) { 776948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // Split the string for further processing. 786948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar RefStepString = ArgSub.substr(RefPos + 1); 796948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar ArgSub = ArgSub.substr(0, RefPos); 806948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 816948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar bool Enable; 826948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar bool UseDefaults; 836948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (ArgSub == "all") { 846948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar UseDefaults = false; 856948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar Enable = true; 866948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } else if (ArgSub == "none") { 876948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar UseDefaults = false; 886948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar Enable = false; 896948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } else if (ArgSub == "default") { 906948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar UseDefaults = true; 916948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } else { 926948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // Any other string is invalid or an individual setting. 936948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return false; 946948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 956948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 966948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // All enable values will be initialized to target defaults if 'default' was 976948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // specified. 986948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (!UseDefaults) 996948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar for (auto &KV : RecipMap) 1006948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar KV.second.Enabled = Enable; 1016948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1026948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // Custom refinement count was specified with all, none, or default. 1036948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (!RefStepString.empty()) 1046948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar for (auto &KV : RecipMap) 1056948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar KV.second.RefinementSteps = RefSteps; 1066948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1076948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return true; 1086948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar} 1096948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1106948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainarvoid TargetRecip::parseIndividualParams(const std::vector<std::string> &Args) { 1116948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar static const char DisabledPrefix = '!'; 1126948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar unsigned NumArgs = Args.size(); 1136948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1146948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar for (unsigned i = 0; i != NumArgs; ++i) { 1156948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar StringRef Val = Args[i]; 1166948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1176948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar bool IsDisabled = Val[0] == DisabledPrefix; 1186948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // Ignore the disablement token for string matching. 1196948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (IsDisabled) 1206948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar Val = Val.substr(1); 1216948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1226948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar size_t RefPos; 1236948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar uint8_t RefSteps; 1246948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar StringRef RefStepString; 1256948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (parseRefinementStep(Val, RefPos, RefSteps)) { 1266948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // Split the string for further processing. 1276948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar RefStepString = Val.substr(RefPos + 1); 1286948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar Val = Val.substr(0, RefPos); 1296948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 1306948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1316948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar RecipIter Iter = RecipMap.find(Val); 1326948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (Iter == RecipMap.end()) { 1336948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // Try again specifying float suffix. 1346948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar Iter = RecipMap.find(Val.str() + 'f'); 1356948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (Iter == RecipMap.end()) { 1366948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar Iter = RecipMap.find(Val.str() + 'd'); 1376948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar assert(Iter == RecipMap.end() && "Float entry missing from map"); 1386948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar report_fatal_error("Invalid option for -recip."); 1396948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 1406948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1416948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // The option was specified without a float or double suffix. 1426948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (RecipMap[Val.str() + 'd'].Enabled != Uninitialized) { 1436948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // Make sure that the double entry was not already specified. 1446948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // The float entry will be checked below. 1456948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar report_fatal_error("Duplicate option for -recip."); 1466948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 1476948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 1486948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1496948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (Iter->second.Enabled != Uninitialized) 1506948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar report_fatal_error("Duplicate option for -recip."); 1516948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1526948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // Mark the matched option as found. Do not allow duplicate specifiers. 1536948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar Iter->second.Enabled = !IsDisabled; 1546948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (!RefStepString.empty()) 1556948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar Iter->second.RefinementSteps = RefSteps; 1566948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1576948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // If the precision was not specified, the double entry is also initialized. 1586948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (Val.back() != 'f' && Val.back() != 'd') { 159de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar RecipParams &Params = RecipMap[Val.str() + 'd']; 160de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Params.Enabled = !IsDisabled; 1616948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (!RefStepString.empty()) 162de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Params.RefinementSteps = RefSteps; 1636948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 1646948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 1656948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar} 1666948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1676948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga NainarTargetRecip::TargetRecip(const std::vector<std::string> &Args) : 1686948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar TargetRecip() { 1696948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar unsigned NumArgs = Args.size(); 1706948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1716948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar // Check if "all", "default", or "none" was specified. 1726948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (NumArgs == 1 && parseGlobalParams(Args[0])) 1736948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return; 1746948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1756948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar parseIndividualParams(Args); 1766948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar} 1776948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 178f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarbool TargetRecip::isEnabled(StringRef Key) const { 1796948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar ConstRecipIter Iter = RecipMap.find(Key); 1806948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar assert(Iter != RecipMap.end() && "Unknown name for reciprocal map"); 1816948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar assert(Iter->second.Enabled != Uninitialized && 1826948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar "Enablement setting was not initialized"); 1836948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return Iter->second.Enabled; 1846948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar} 1856948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 186f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarunsigned TargetRecip::getRefinementSteps(StringRef Key) const { 1876948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar ConstRecipIter Iter = RecipMap.find(Key); 1886948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar assert(Iter != RecipMap.end() && "Unknown name for reciprocal map"); 1896948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar assert(Iter->second.RefinementSteps != Uninitialized && 1906948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar "Refinement step setting was not initialized"); 1916948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return Iter->second.RefinementSteps; 1926948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar} 1936948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 1946948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar/// Custom settings (previously initialized values) override target defaults. 195f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainarvoid TargetRecip::setDefaults(StringRef Key, bool Enable, 1966948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar unsigned RefSteps) { 1976948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (Key == "all") { 1986948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar for (auto &KV : RecipMap) { 1996948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar RecipParams &RP = KV.second; 2006948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (RP.Enabled == Uninitialized) 2016948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar RP.Enabled = Enable; 2026948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (RP.RefinementSteps == Uninitialized) 2036948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar RP.RefinementSteps = RefSteps; 2046948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 2056948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } else { 2066948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar RecipParams &RP = RecipMap[Key]; 2076948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (RP.Enabled == Uninitialized) 2086948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar RP.Enabled = Enable; 2096948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (RP.RefinementSteps == Uninitialized) 2106948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar RP.RefinementSteps = RefSteps; 2116948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 2126948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar} 2136948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar 2146948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainarbool TargetRecip::operator==(const TargetRecip &Other) const { 2156948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar for (const auto &KV : RecipMap) { 216f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar StringRef Op = KV.first; 2176948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar const RecipParams &RP = KV.second; 2186948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar const RecipParams &OtherRP = Other.RecipMap.find(Op)->second; 2196948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (RP.RefinementSteps != OtherRP.RefinementSteps) 2206948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return false; 2216948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar if (RP.Enabled != OtherRP.Enabled) 2226948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return false; 2236948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar } 2246948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar return true; 2256948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar} 226