<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/92901>92901</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            How to understand the getTLSModel() function's selection of the TLSModel?
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Thrrreeee
      </td>
    </tr>
</table>

<pre>
    I can't understand why, after assigning the variable TLSModel following the IR analysis, this function still performs a check on it. Additionally, why does it assign TLSModel based on this condition ( `if (SelectedModel > Model)` ), as the strictness increases with larger values? 
Finally, what could happen if I forcibly change a variable's TLSModel judged as `LocalDynamic `to `GeneralDynamic`? What if I modify the IR directly to remove its `private` type, so that the variable's islocal check results in false? And then this variable'TLSModel can be `GeneralDynamic`.
Because JITlink does not yet support R_X86_64_TLSLD.
[code](https://github.com/llvm/llvm-project/blob/46d8bb08cfd3798977b4e22881514dc9d77425c2/llvm/lib/Target/TargetMachine.cpp#L237C1-L262C2)
```
TLSModel::Model TargetMachine::getTLSModel(const GlobalValue *GV) const {
  bool IsPIE = GV->getParent()->getPIELevel() != PIELevel::Default;
  Reloc::Model RM = getRelocationModel();
  bool IsSharedLibrary = RM == Reloc::PIC_ && !IsPIE;
  bool IsLocal = shouldAssumeDSOLocal(GV);

  TLSModel::Model Model;
  if (IsSharedLibrary) {
    if (IsLocal)
      Model = TLSModel::LocalDynamic;
    else
      Model = TLSModel::GeneralDynamic;
  } else {
    if (IsLocal)
      Model = TLSModel::LocalExec;
    else
      Model = TLSModel::InitialExec;
  }

  // If the user specified a more specific model, use that.
  TLSModel::Model SelectedModel = getSelectedTLSModel(GV);
  if (SelectedModel > Model)
    return SelectedModel;

  return Model;
}


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVl1v4ygX_jXk5mgiG8dfF7lIm6ZvXmW0o7aa3bsKw3HMDAELcLv59ytwnKSZ0Wh3tVLVYA7nOc_5BOac3GvEJcnvSL6escF3xi5fOmstIuKsMeK43AJnmtDSw6AFWueZFvDeHQm9B9Z6tDDiSL0H3yG8MStZoxBeds-fjUAFrVHKvE_y7RMwzdTRSRcgfCcdtIPmXhoNzkuloEfbGntwwIB3yL-D0SD9HFZCyHCMKRXNv3dHEAYdSH8icTHaMIciKEYD3OhRFQitgBSJbMPqGRVyj2JUIdkDxBWhNSkSCD_BSRd5O28l9xqdA6m5RebQwbv0HShm92jhjakBHck2QJI1SVYbeUWUeeBmUAI61veoQbawhdZYLht1BN4xvUdg5-ARWrqLL98GsUcRiJAi2RnO1Pqo2UHy8O1N-P-IGu15nxRJ4PF7MBstHYyQ7XGKv5AWuVdH8AYsHswbgvQRvLfyjXkM3vtjj4G7M-ADznVuIz3pVKBySpFFNygfYgMtUw6D_ZUWQe2Ugyvls2ecaWjwpw7MxyjeIWeDQ_j_9kVJ_X3MtzYejujBDX1vrIen1z-q4rVYvL7snnfrkybJ77gRSPI1oVXnfe9ItiJ0Q-hmL303NHNuDoRulHqbfj711nxD7gndNMo0hG4WhaiaJql4K7KyruqybBZIaVWleboQvBZluaA5p1c4Mui9hJrw58Vnxjupcc77ntBsR7PyPv20owW9p6HKRr5FcvqLn1OMAulsNYbrA9go2KM_n6QVN9p5eFSmYeprqEcgdPX4ldAaRhEp70Z4gMYYBVv3ZfsAJFvD49dPJHvYo__CLGpPaEVoPW1tH3b4Fi0EKELToHHejUTW2LJBeZKdDTyhMvya_tPnaGmPPopYaMiJeQhDdsvtuWMWxU42ltlj1B0h4uqC_mV7_wqEFoQWgVv06Uew2DgRxHWhFVfODQdcP_8WBYRWMU5nvUn7Z3k4bZwtjNPkhm-M1CXcl1Mne_VFAjBNoPWNvetuvzIIgKHH_gbATV9dIEi5jiD_EceHP_HfEdxq6eUP-qRcf0zD2LiwbeMgGhxacD1y2cowGeFgLE4bPIy7UFT34VycXvNfZfP2FogVOm1eNdfH-phi9Ys75Oy9RT9Y_dHQD4V2OnQj_BiHmVhmos5qNsNlWqYFrWlVJ7NumbV5TsuKl0ldJ21RVxgGk0irOk3ahiUzuaQJXSQ5TVOapDSfp4u8LquELuq8SNpWkEWCBybVPMyxubH7mXRuwGVN6ySdKdagcvGlQKnGd4hCQml4ONhlHJ7NsHdkkSjpvLugeOkVLv9n3sNtc_WECGn8OLxCw0wvgXjDuBivcGubMe3nww8bcndP6s1ssGr5j2d75O4I3UTf_goAAP__BfrGMg">