Skip to content

Commit aad87b6

Browse files
committed
merge main into amd-staging
2 parents f8ddbd0 + b1a267e commit aad87b6

File tree

132 files changed

+820
-535
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

132 files changed

+820
-535
lines changed

clang/lib/Format/TokenAnnotator.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -477,17 +477,20 @@ class AnnotatingParser {
477477
FormatToken *PossibleObjCForInToken = nullptr;
478478
while (CurrentToken) {
479479
const auto &Prev = *CurrentToken->Previous;
480+
const auto *PrevPrev = Prev.Previous;
480481
if (Prev.is(TT_PointerOrReference) &&
481-
Prev.Previous->isOneOf(tok::l_paren, tok::coloncolon)) {
482+
PrevPrev->isOneOf(tok::l_paren, tok::coloncolon)) {
482483
ProbablyFunctionType = true;
483484
}
484485
if (CurrentToken->is(tok::comma))
485486
MightBeFunctionType = false;
486487
if (Prev.is(TT_BinaryOperator))
487488
Contexts.back().IsExpression = true;
488489
if (CurrentToken->is(tok::r_paren)) {
489-
if (Prev.is(TT_PointerOrReference) && Prev.Previous == &OpeningParen)
490+
if (Prev.is(TT_PointerOrReference) &&
491+
(PrevPrev == &OpeningParen || PrevPrev->is(tok::coloncolon))) {
490492
MightBeFunctionType = true;
493+
}
491494
if (OpeningParen.isNot(TT_CppCastLParen) && MightBeFunctionType &&
492495
ProbablyFunctionType && CurrentToken->Next &&
493496
(CurrentToken->Next->is(tok::l_paren) ||

clang/test/Driver/offload-Xarch.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// UNSUPPORTED: target={{.*darwin.*}}
2+
13
// RUN: %clang --target=x86_64-unknown-linux-gnu -x cuda %s -Xarch_nvptx64 -O3 -S -nogpulib -nogpuinc -### 2>&1 | FileCheck -check-prefix=O3ONCE %s
24
// RUN: %clang -x cuda %s -Xarch_device -O3 -S -nogpulib -nogpuinc -### 2>&1 | FileCheck -check-prefix=O3ONCE %s
35
// RUN: %clang -x hip %s -Xarch_amdgcn -O3 -S -nogpulib -nogpuinc -### 2>&1 | FileCheck -check-prefix=O3ONCE %s

clang/test/Modules/pr120277-2.cpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// RUN: rm -rf %t
2+
// RUN: mkdir -p %t
3+
// RUN: split-file %s %t
4+
5+
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/hu-01.h \
6+
// RUN: -o %t/hu-01.pcm
7+
8+
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/hu-02.h \
9+
// RUN: -Wno-experimental-header-units -fmodule-file=%t/hu-01.pcm -o %t/hu-02.pcm
10+
11+
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/hu-03.h \
12+
// RUN: -Wno-experimental-header-units \
13+
// RUN: -fmodule-file=%t/hu-01.pcm -o %t/hu-03.pcm
14+
15+
// RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/hu-04.h \
16+
// RUN: -Wno-experimental-header-units -fmodule-file=%t/hu-02.pcm \
17+
// RUN: -fmodule-file=%t/hu-03.pcm -o %t/hu-04.pcm
18+
19+
// RUN: %clang_cc1 -std=c++20 -emit-obj %t/main.cpp \
20+
// RUN: -Wno-experimental-header-units -fmodule-file=%t/hu-04.pcm
21+
//--- hu-01.h
22+
template <typename T>
23+
struct A {
24+
~A() { f(); }
25+
auto f() const { return 0; }
26+
};
27+
28+
template <typename T>
29+
struct B {
30+
int g() const { return a.f(); }
31+
A<T> a;
32+
};
33+
34+
//--- hu-02.h
35+
import "hu-01.h";
36+
37+
template <typename = void>
38+
struct C {
39+
void h() {
40+
B<int>().g();
41+
}
42+
};
43+
44+
template struct A<double>;
45+
46+
//--- hu-03.h
47+
import "hu-01.h";
48+
49+
inline B<int> b() {
50+
return {};
51+
}
52+
53+
//--- hu-04.h
54+
import "hu-02.h";
55+
import "hu-03.h";
56+
57+
inline void f4() {
58+
C{}.h();
59+
}
60+
61+
//--- main.cpp
62+
import "hu-04.h";
63+
64+
int main() {
65+
f4();
66+
}

clang/unittests/Format/TokenAnnotatorTest.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -874,6 +874,12 @@ TEST_F(TokenAnnotatorTest, UnderstandsCasts) {
874874
EXPECT_TOKEN(Tokens[14], tok::r_paren, TT_CastRParen);
875875
EXPECT_TOKEN(Tokens[15], tok::amp, TT_UnaryOperator);
876876

877+
Tokens = annotate("return (Foo (Bar::*)())&Bar::foo;");
878+
ASSERT_EQ(Tokens.size(), 17u) << Tokens;
879+
EXPECT_TOKEN(Tokens[3], tok::l_paren, TT_FunctionTypeLParen);
880+
EXPECT_TOKEN(Tokens[10], tok::r_paren, TT_CastRParen);
881+
EXPECT_TOKEN(Tokens[11], tok::amp, TT_UnaryOperator);
882+
877883
auto Style = getLLVMStyle();
878884
Style.TypeNames.push_back("Foo");
879885
Tokens = annotate("#define FOO(bar) foo((Foo)&bar)", Style);

llvm/lib/CodeGen/MIRPrinter.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ void MIRPrinter::convertStackObjects(yaml::MachineFunction &YMF,
452452
YamlObject.IsAliased = MFI.isAliasedObjectIndex(I);
453453
// Save the ID' position in FixedStackObjects storage vector.
454454
FixedStackObjectsIdx[ID] = YMF.FixedStackObjects.size();
455-
YMF.FixedStackObjects.push_back(YamlObject);
455+
YMF.FixedStackObjects.push_back(std::move(YamlObject));
456456
StackObjectOperandMapping.insert(
457457
std::make_pair(I, FrameIndexOperand::createFixed(ID)));
458458
}
@@ -506,11 +506,11 @@ void MIRPrinter::convertStackObjects(yaml::MachineFunction &YMF,
506506
auto &Object =
507507
YMF.FixedStackObjects
508508
[FixedStackObjectsIdx[FrameIdx + MFI.getNumFixedObjects()]];
509-
Object.CalleeSavedRegister = Reg;
509+
Object.CalleeSavedRegister = std::move(Reg);
510510
Object.CalleeSavedRestored = CSInfo.isRestored();
511511
} else {
512512
auto &Object = YMF.StackObjects[StackObjectsIdx[FrameIdx]];
513-
Object.CalleeSavedRegister = Reg;
513+
Object.CalleeSavedRegister = std::move(Reg);
514514
Object.CalleeSavedRestored = CSInfo.isRestored();
515515
}
516516
}
@@ -576,7 +576,7 @@ void MIRPrinter::convertCallSiteObjects(yaml::MachineFunction &YMF,
576576
printRegMIR(ArgReg.Reg, YmlArgReg.Reg, TRI);
577577
YmlCS.ArgForwardingRegs.emplace_back(YmlArgReg);
578578
}
579-
YMF.CallSitesInfo.push_back(YmlCS);
579+
YMF.CallSitesInfo.push_back(std::move(YmlCS));
580580
}
581581

582582
// Sort call info by position of call instructions.
@@ -597,7 +597,7 @@ void MIRPrinter::convertMachineMetadataNodes(yaml::MachineFunction &YMF,
597597
std::string NS;
598598
raw_string_ostream StrOS(NS);
599599
MD.second->print(StrOS, MST, MF.getFunction().getParent());
600-
YMF.MachineMetadataNodes.push_back(NS);
600+
YMF.MachineMetadataNodes.push_back(std::move(NS));
601601
}
602602
}
603603

@@ -612,7 +612,7 @@ void MIRPrinter::convertCalledGlobals(yaml::MachineFunction &YMF,
612612

613613
yaml::CalledGlobal YamlCG{CallSite, CG.Callee->getName().str(),
614614
CG.TargetFlags};
615-
YMF.CalledGlobals.push_back(YamlCG);
615+
YMF.CalledGlobals.push_back(std::move(YamlCG));
616616
}
617617

618618
// Sort by position of call instructions.
@@ -638,11 +638,11 @@ void MIRPrinter::convert(yaml::MachineFunction &MF,
638638

639639
yaml::MachineConstantPoolValue YamlConstant;
640640
YamlConstant.ID = ID++;
641-
YamlConstant.Value = Str;
641+
YamlConstant.Value = std::move(Str);
642642
YamlConstant.Alignment = Constant.getAlign();
643643
YamlConstant.IsTargetSpecific = Constant.isMachineConstantPoolEntry();
644644

645-
MF.Constants.push_back(YamlConstant);
645+
MF.Constants.push_back(std::move(YamlConstant));
646646
}
647647
}
648648

@@ -661,7 +661,7 @@ void MIRPrinter::convert(ModuleSlotTracker &MST,
661661
Entry.Blocks.push_back(Str);
662662
Str.clear();
663663
}
664-
YamlJTI.Entries.push_back(Entry);
664+
YamlJTI.Entries.push_back(std::move(Entry));
665665
}
666666
}
667667

llvm/lib/CodeGen/MachineFunction.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -977,13 +977,13 @@ void MachineFunction::copyAdditionalCallInfo(const MachineInstr *Old,
977977
CallSiteInfoMap::iterator CSIt = getCallSiteInfo(OldCallMI);
978978
if (CSIt != CallSitesInfo.end()) {
979979
CallSiteInfo CSInfo = CSIt->second;
980-
CallSitesInfo[New] = CSInfo;
980+
CallSitesInfo[New] = std::move(CSInfo);
981981
}
982982

983983
CalledGlobalsMap::iterator CGIt = CalledGlobalsInfo.find(OldCallMI);
984984
if (CGIt != CalledGlobalsInfo.end()) {
985985
CalledGlobalInfo CGInfo = CGIt->second;
986-
CalledGlobalsInfo[New] = CGInfo;
986+
CalledGlobalsInfo[New] = std::move(CGInfo);
987987
}
988988
}
989989

@@ -1001,14 +1001,14 @@ void MachineFunction::moveAdditionalCallInfo(const MachineInstr *Old,
10011001
if (CSIt != CallSitesInfo.end()) {
10021002
CallSiteInfo CSInfo = std::move(CSIt->second);
10031003
CallSitesInfo.erase(CSIt);
1004-
CallSitesInfo[New] = CSInfo;
1004+
CallSitesInfo[New] = std::move(CSInfo);
10051005
}
10061006

10071007
CalledGlobalsMap::iterator CGIt = CalledGlobalsInfo.find(OldCallMI);
10081008
if (CGIt != CalledGlobalsInfo.end()) {
10091009
CalledGlobalInfo CGInfo = std::move(CGIt->second);
10101010
CalledGlobalsInfo.erase(CGIt);
1011-
CalledGlobalsInfo[New] = CGInfo;
1011+
CalledGlobalsInfo[New] = std::move(CGInfo);
10121012
}
10131013
}
10141014

llvm/lib/Frontend/OpenMP/OMPContext.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ OMPContext::OMPContext(bool IsDeviceCompilation, Triple TargetTriple,
6767
TargetOffloadTriple.getArch() == Triple::x86_64) \
6868
ActiveTraits.set(unsigned(TraitProperty::Enum)); \
6969
}
70-
#undef OMP_TRAIT_PROPERTY
70+
#include "llvm/Frontend/OpenMP/OMPKinds.def"
7171
} else {
7272
// Add the appropriate device kind trait based on the triple and the
7373
// IsDeviceCompilation flag.

llvm/lib/Target/AMDGPU/AMDGPULateCodeGenPrepare.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -367,11 +367,11 @@ bool LiveRegOptimizer::optimizeLiveType(
367367
for (Instruction *U : Uses) {
368368
// Replace all converted operands for a use.
369369
for (auto [OpIdx, Op] : enumerate(U->operands())) {
370-
if (ValMap.contains(Op) && ValMap[Op]) {
370+
if (Value *Val = ValMap.lookup(Op)) {
371371
Value *NewVal = nullptr;
372372
if (BBUseValMap.contains(U->getParent()) &&
373-
BBUseValMap[U->getParent()].contains(ValMap[Op]))
374-
NewVal = BBUseValMap[U->getParent()][ValMap[Op]];
373+
BBUseValMap[U->getParent()].contains(Val))
374+
NewVal = BBUseValMap[U->getParent()][Val];
375375
else {
376376
BasicBlock::iterator InsertPt = U->getParent()->getFirstNonPHIIt();
377377
// We may pick up ops that were previously converted for users in

llvm/lib/Transforms/Vectorize/LoopVectorize.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2507,6 +2507,15 @@ void InnerLoopVectorizer::introduceCheckBlockInVPlan(BasicBlock *CheckIRBB) {
25072507
}
25082508
VPBlockUtils::connectBlocks(PreVectorPH, ScalarPH);
25092509
PreVectorPH->swapSuccessors();
2510+
2511+
// We just connected a new block to the scalar preheader. Update all
2512+
// ResumePhis by adding an incoming value for it.
2513+
for (VPRecipeBase &R : *cast<VPBasicBlock>(ScalarPH)) {
2514+
auto *ResumePhi = dyn_cast<VPInstruction>(&R);
2515+
if (!ResumePhi || ResumePhi->getOpcode() != VPInstruction::ResumePhi)
2516+
continue;
2517+
ResumePhi->addOperand(ResumePhi->getOperand(1));
2518+
}
25102519
}
25112520

25122521
void InnerLoopVectorizer::emitIterationCountCheck(BasicBlock *Bypass) {
@@ -7642,8 +7651,8 @@ static void fixReductionScalarResumeWhenVectorizingEpilog(
76427651
// over the incoming values correctly.
76437652
using namespace VPlanPatternMatch;
76447653
auto IsResumePhi = [](VPUser *U) {
7645-
return match(
7646-
U, m_VPInstruction<VPInstruction::ResumePhi>(m_VPValue(), m_VPValue()));
7654+
auto *VPI = dyn_cast<VPInstruction>(U);
7655+
return VPI && VPI->getOpcode() == VPInstruction::ResumePhi;
76477656
};
76487657
assert(count_if(EpiRedResult->users(), IsResumePhi) == 1 &&
76497658
"ResumePhi must have a single user");
@@ -7747,12 +7756,20 @@ DenseMap<const SCEV *, Value *> LoopVectorizationPlanner::executePlan(
77477756
if (VectorizingEpilogue) {
77487757
assert(!ILV.Legal->hasUncountableEarlyExit() &&
77497758
"Epilogue vectorisation not yet supported with early exits");
7759+
BasicBlock *PH = OrigLoop->getLoopPreheader();
77507760
BasicBlock *BypassBlock = ILV.getAdditionalBypassBlock();
7761+
for (auto *Pred : predecessors(PH)) {
7762+
for (PHINode &Phi : PH->phis()) {
7763+
if (Phi.getBasicBlockIndex(Pred) != -1)
7764+
continue;
7765+
Phi.addIncoming(Phi.getIncomingValueForBlock(BypassBlock), Pred);
7766+
}
7767+
}
7768+
77517769
for (VPRecipeBase &R : *MiddleVPBB) {
77527770
fixReductionScalarResumeWhenVectorizingEpilog(
77537771
&R, State, State.CFG.VPBB2IRBB[MiddleVPBB], BypassBlock);
77547772
}
7755-
BasicBlock *PH = OrigLoop->getLoopPreheader();
77567773
for (const auto &[IVPhi, _] : Legal->getInductionVars()) {
77577774
auto *Inc = cast<PHINode>(IVPhi->getIncomingValueForBlock(PH));
77587775
Value *V = ILV.getInductionAdditionalBypassValue(IVPhi);

llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -685,20 +685,13 @@ Value *VPInstruction::generate(VPTransformState &State) {
685685
return Builder.CreatePtrAdd(Ptr, Addend, Name, getGEPNoWrapFlags());
686686
}
687687
case VPInstruction::ResumePhi: {
688-
Value *IncomingFromVPlanPred =
689-
State.get(getOperand(0), /* IsScalar */ true);
690-
Value *IncomingFromOtherPreds =
691-
State.get(getOperand(1), /* IsScalar */ true);
692688
auto *NewPhi =
693689
Builder.CreatePHI(State.TypeAnalysis.inferScalarType(this), 2, Name);
694-
BasicBlock *VPlanPred =
695-
State.CFG
696-
.VPBB2IRBB[cast<VPBasicBlock>(getParent()->getPredecessors()[0])];
697-
NewPhi->addIncoming(IncomingFromVPlanPred, VPlanPred);
698-
for (auto *OtherPred : predecessors(Builder.GetInsertBlock())) {
699-
if (OtherPred == VPlanPred)
700-
continue;
701-
NewPhi->addIncoming(IncomingFromOtherPreds, OtherPred);
690+
for (const auto &[IncVPV, PredVPBB] :
691+
zip(operands(), getParent()->getPredecessors())) {
692+
Value *IncV = State.get(IncVPV, /* IsScalar */ true);
693+
BasicBlock *PredBB = State.CFG.VPBB2IRBB.at(cast<VPBasicBlock>(PredVPBB));
694+
NewPhi->addIncoming(IncV, PredBB);
702695
}
703696
return NewPhi;
704697
}

0 commit comments

Comments
 (0)