@@ -975,8 +975,8 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
975
975
isLocalARMFunc = !Subtarget->isThumb () && !isExt;
976
976
// tBX takes a register source operand.
977
977
if (isARMFunc && Subtarget->isThumb1Only () && !Subtarget->hasV5TOps ()) {
978
- ARMConstantPoolValue *CPV = new ARMConstantPoolValue (GV, ARMPCLabelIndex,
979
- ARMCP::CPStub , 4 );
978
+ ARMConstantPoolValue *CPV = new ARMConstantPoolValue (GV,
979
+ ARMPCLabelIndex , 4 );
980
980
SDValue CPAddr = DAG.getTargetConstantPool (CPV, getPointerTy (), 4 );
981
981
CPAddr = DAG.getNode (ARMISD::Wrapper, dl, MVT::i32 , CPAddr);
982
982
Callee = DAG.getLoad (getPointerTy (), dl,
@@ -995,8 +995,7 @@ ARMTargetLowering::LowerCall(SDValue Chain, SDValue Callee,
995
995
const char *Sym = S->getSymbol ();
996
996
if (isARMFunc && Subtarget->isThumb1Only () && !Subtarget->hasV5TOps ()) {
997
997
ARMConstantPoolValue *CPV = new ARMConstantPoolValue (*DAG.getContext (),
998
- Sym, ARMPCLabelIndex,
999
- ARMCP::CPStub, 4 );
998
+ Sym, ARMPCLabelIndex, 4 );
1000
999
SDValue CPAddr = DAG.getTargetConstantPool (CPV, getPointerTy (), 4 );
1001
1000
CPAddr = DAG.getNode (ARMISD::Wrapper, dl, MVT::i32 , CPAddr);
1002
1001
Callee = DAG.getLoad (getPointerTy (), dl,
@@ -1173,7 +1172,7 @@ ARMTargetLowering::LowerToTLSGeneralDynamicModel(GlobalAddressSDNode *GA,
1173
1172
EVT PtrVT = getPointerTy ();
1174
1173
unsigned char PCAdj = Subtarget->isThumb () ? 4 : 8 ;
1175
1174
ARMConstantPoolValue *CPV =
1176
- new ARMConstantPoolValue (GA->getGlobal (), ARMPCLabelIndex, ARMCP::CPValue,
1175
+ new ARMConstantPoolValue (GA->getGlobal (), ARMPCLabelIndex,
1177
1176
PCAdj, " tlsgd" , true );
1178
1177
SDValue Argument = DAG.getTargetConstantPool (CPV, PtrVT, 4 );
1179
1178
Argument = DAG.getNode (ARMISD::Wrapper, dl, MVT::i32 , Argument);
@@ -1215,7 +1214,7 @@ ARMTargetLowering::LowerToTLSExecModels(GlobalAddressSDNode *GA,
1215
1214
// initial exec model
1216
1215
unsigned char PCAdj = Subtarget->isThumb () ? 4 : 8 ;
1217
1216
ARMConstantPoolValue *CPV =
1218
- new ARMConstantPoolValue (GA->getGlobal (), ARMPCLabelIndex, ARMCP::CPValue,
1217
+ new ARMConstantPoolValue (GA->getGlobal (), ARMPCLabelIndex,
1219
1218
PCAdj, " gottpoff" , true );
1220
1219
Offset = DAG.getTargetConstantPool (CPV, PtrVT, 4 );
1221
1220
Offset = DAG.getNode (ARMISD::Wrapper, dl, MVT::i32 , Offset);
@@ -1228,8 +1227,7 @@ ARMTargetLowering::LowerToTLSExecModels(GlobalAddressSDNode *GA,
1228
1227
Offset = DAG.getLoad (PtrVT, dl, Chain, Offset, NULL , 0 );
1229
1228
} else {
1230
1229
// local exec model
1231
- ARMConstantPoolValue *CPV =
1232
- new ARMConstantPoolValue (GV, ARMCP::CPValue, " tpoff" );
1230
+ ARMConstantPoolValue *CPV = new ARMConstantPoolValue (GV, " tpoff" );
1233
1231
Offset = DAG.getTargetConstantPool (CPV, PtrVT, 4 );
1234
1232
Offset = DAG.getNode (ARMISD::Wrapper, dl, MVT::i32 , Offset);
1235
1233
Offset = DAG.getLoad (PtrVT, dl, Chain, Offset, NULL , 0 );
@@ -1263,7 +1261,7 @@ SDValue ARMTargetLowering::LowerGlobalAddressELF(SDValue Op,
1263
1261
if (RelocM == Reloc::PIC_) {
1264
1262
bool UseGOTOFF = GV->hasLocalLinkage () || GV->hasHiddenVisibility ();
1265
1263
ARMConstantPoolValue *CPV =
1266
- new ARMConstantPoolValue (GV, ARMCP::CPValue, UseGOTOFF ? " GOTOFF" : " GOT" );
1264
+ new ARMConstantPoolValue (GV, UseGOTOFF ? " GOTOFF" : " GOT" );
1267
1265
SDValue CPAddr = DAG.getTargetConstantPool (CPV, PtrVT, 4 );
1268
1266
CPAddr = DAG.getNode (ARMISD::Wrapper, dl, MVT::i32 , CPAddr);
1269
1267
SDValue Result = DAG.getLoad (PtrVT, dl, DAG.getEntryNode (),
@@ -1281,34 +1279,19 @@ SDValue ARMTargetLowering::LowerGlobalAddressELF(SDValue Op,
1281
1279
}
1282
1280
}
1283
1281
1284
- // / GVIsIndirectSymbol - true if the GV will be accessed via an indirect symbol
1285
- // / even in non-static mode.
1286
- static bool GVIsIndirectSymbol (GlobalValue *GV, Reloc::Model RelocM) {
1287
- // If symbol visibility is hidden, the extra load is not needed if
1288
- // the symbol is definitely defined in the current translation unit.
1289
- bool isDecl = GV->isDeclaration () || GV->hasAvailableExternallyLinkage ();
1290
- if (GV->hasHiddenVisibility () && (!isDecl && !GV->hasCommonLinkage ()))
1291
- return false ;
1292
- return RelocM != Reloc::Static && (isDecl || GV->isWeakForLinker ());
1293
- }
1294
-
1295
1282
SDValue ARMTargetLowering::LowerGlobalAddressDarwin (SDValue Op,
1296
1283
SelectionDAG &DAG) {
1297
1284
EVT PtrVT = getPointerTy ();
1298
1285
DebugLoc dl = Op.getDebugLoc ();
1299
1286
GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal ();
1300
1287
Reloc::Model RelocM = getTargetMachine ().getRelocationModel ();
1301
- bool IsIndirect = GVIsIndirectSymbol (GV, RelocM);
1302
1288
SDValue CPAddr;
1303
1289
if (RelocM == Reloc::Static)
1304
1290
CPAddr = DAG.getTargetConstantPool (GV, PtrVT, 4 );
1305
1291
else {
1306
- unsigned PCAdj = (RelocM != Reloc::PIC_)
1307
- ? 0 : (Subtarget->isThumb () ? 4 : 8 );
1308
- ARMCP::ARMCPKind Kind = IsIndirect ? ARMCP::CPNonLazyPtr
1309
- : ARMCP::CPValue;
1310
- ARMConstantPoolValue *CPV = new ARMConstantPoolValue (GV, ARMPCLabelIndex,
1311
- Kind, PCAdj);
1292
+ unsigned PCAdj = (RelocM != Reloc::PIC_) ? 0 : (Subtarget->isThumb ()?4 :8 );
1293
+ ARMConstantPoolValue *CPV =
1294
+ new ARMConstantPoolValue (GV, ARMPCLabelIndex, PCAdj);
1312
1295
CPAddr = DAG.getTargetConstantPool (CPV, PtrVT, 4 );
1313
1296
}
1314
1297
CPAddr = DAG.getNode (ARMISD::Wrapper, dl, MVT::i32 , CPAddr);
@@ -1320,7 +1303,8 @@ SDValue ARMTargetLowering::LowerGlobalAddressDarwin(SDValue Op,
1320
1303
SDValue PICLabel = DAG.getConstant (ARMPCLabelIndex++, MVT::i32 );
1321
1304
Result = DAG.getNode (ARMISD::PIC_ADD, dl, PtrVT, Result, PICLabel);
1322
1305
}
1323
- if (IsIndirect)
1306
+
1307
+ if (Subtarget->GVIsIndirectSymbol (GV, RelocM == Reloc::Static))
1324
1308
Result = DAG.getLoad (PtrVT, dl, Chain, Result, NULL , 0 );
1325
1309
1326
1310
return Result;
@@ -1335,8 +1319,7 @@ SDValue ARMTargetLowering::LowerGLOBAL_OFFSET_TABLE(SDValue Op,
1335
1319
unsigned PCAdj = Subtarget->isThumb () ? 4 : 8 ;
1336
1320
ARMConstantPoolValue *CPV = new ARMConstantPoolValue (*DAG.getContext (),
1337
1321
" _GLOBAL_OFFSET_TABLE_" ,
1338
- ARMPCLabelIndex,
1339
- ARMCP::CPValue, PCAdj);
1322
+ ARMPCLabelIndex, PCAdj);
1340
1323
SDValue CPAddr = DAG.getTargetConstantPool (CPV, PtrVT, 4 );
1341
1324
CPAddr = DAG.getNode (ARMISD::Wrapper, dl, MVT::i32 , CPAddr);
1342
1325
SDValue Result = DAG.getLoad (PtrVT, dl, DAG.getEntryNode (), CPAddr, NULL , 0 );
@@ -1417,14 +1400,13 @@ ARMTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) {
1417
1400
SDValue CPAddr;
1418
1401
unsigned PCAdj = (RelocM != Reloc::PIC_)
1419
1402
? 0 : (Subtarget->isThumb () ? 4 : 8 );
1420
- ARMCP::ARMCPKind Kind = ARMCP::CPValue;
1421
1403
// Save off the LSDA name for the AsmPrinter to use when it's time
1422
1404
// to emit the table
1423
1405
std::string LSDAName = " L_lsda_" ;
1424
1406
LSDAName += MF.getFunction ()->getName ();
1425
1407
ARMConstantPoolValue *CPV =
1426
1408
new ARMConstantPoolValue (*DAG.getContext (), LSDAName.c_str (),
1427
- ARMPCLabelIndex, Kind, PCAdj);
1409
+ ARMPCLabelIndex, PCAdj);
1428
1410
CPAddr = DAG.getTargetConstantPool (CPV, PtrVT, 4 );
1429
1411
CPAddr = DAG.getNode (ARMISD::Wrapper, dl, MVT::i32 , CPAddr);
1430
1412
SDValue Result =
0 commit comments