Skip to content

Commit dcf6745

Browse files
Merge branch 'llvm:main' into dev
2 parents f43171b + 01a103b commit dcf6745

File tree

20 files changed

+959
-385
lines changed

20 files changed

+959
-385
lines changed

clang/include/clang/Basic/BuiltinsLoongArchLASX.def

Lines changed: 72 additions & 72 deletions
Large diffs are not rendered by default.

clang/include/clang/Basic/BuiltinsLoongArchLSX.def

Lines changed: 65 additions & 65 deletions
Large diffs are not rendered by default.

clang/test/Headers/lasxintrin.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// RUN: %clang_cc1 %s -fsyntax-only -triple loongarch64 -target-feature +lasx
2+
// RUN: not %clang_cc1 %s -fsyntax-only -triple loongarch64 -target-feature +lasx -flax-vector-conversions=none
3+
// RUN: not %clang_cc1 %s -fsyntax-only -triple loongarch64 -target-feature +lasx -flax-vector-conversions=none -fno-signed-char
4+
// FIXME: "not" should be removed once we fix GH#110834.
5+
6+
#include <lasxintrin.h>

clang/test/Headers/lsxintrin.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// RUN: %clang_cc1 %s -fsyntax-only -triple loongarch64 -target-feature +lsx
2+
// RUN: not %clang_cc1 %s -fsyntax-only -triple loongarch64 -target-feature +lsx -flax-vector-conversions=none
3+
// RUN: not %clang_cc1 %s -fsyntax-only -triple loongarch64 -target-feature +lsx -flax-vector-conversions=none -fno-signed-char
4+
// FIXME: "not" should be removed once we fix GH#110834.
5+
6+
#include <lsxintrin.h>

llvm/include/llvm/Analysis/MemoryBuiltins.h

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -221,21 +221,43 @@ struct SizeOffsetAPInt : public SizeOffsetType<APInt, SizeOffsetAPInt> {
221221
static bool known(const APInt &V) { return V.getBitWidth() > 1; }
222222
};
223223

224+
/// OffsetSpan - Used internally by \p ObjectSizeOffsetVisitor. Represents a
225+
/// point in memory as a pair of allocated bytes before and after it.
226+
struct OffsetSpan {
227+
APInt Before; /// Number of allocated bytes before this point.
228+
APInt After; /// Number of allocated bytes after this point.
229+
230+
OffsetSpan() = default;
231+
OffsetSpan(APInt Before, APInt After) : Before(Before), After(After) {}
232+
233+
bool knownBefore() const { return known(Before); }
234+
bool knownAfter() const { return known(After); }
235+
bool anyKnown() const { return knownBefore() || knownAfter(); }
236+
bool bothKnown() const { return knownBefore() && knownAfter(); }
237+
238+
bool operator==(const OffsetSpan &RHS) const {
239+
return Before == RHS.Before && After == RHS.After;
240+
}
241+
bool operator!=(const OffsetSpan &RHS) const { return !(*this == RHS); }
242+
243+
static bool known(const APInt &V) { return V.getBitWidth() > 1; }
244+
};
245+
224246
/// Evaluate the size and offset of an object pointed to by a Value*
225247
/// statically. Fails if size or offset are not known at compile time.
226248
class ObjectSizeOffsetVisitor
227-
: public InstVisitor<ObjectSizeOffsetVisitor, SizeOffsetAPInt> {
249+
: public InstVisitor<ObjectSizeOffsetVisitor, OffsetSpan> {
228250
const DataLayout &DL;
229251
const TargetLibraryInfo *TLI;
230252
ObjectSizeOpts Options;
231253
unsigned IntTyBits;
232254
APInt Zero;
233-
SmallDenseMap<Instruction *, SizeOffsetAPInt, 8> SeenInsts;
255+
SmallDenseMap<Instruction *, OffsetSpan, 8> SeenInsts;
234256
unsigned InstructionsVisited;
235257

236258
APInt align(APInt Size, MaybeAlign Align);
237259

238-
static SizeOffsetAPInt unknown() { return SizeOffsetAPInt(); }
260+
static OffsetSpan unknown() { return OffsetSpan(); }
239261

240262
public:
241263
ObjectSizeOffsetVisitor(const DataLayout &DL, const TargetLibraryInfo *TLI,
@@ -245,29 +267,30 @@ class ObjectSizeOffsetVisitor
245267

246268
// These are "private", except they can't actually be made private. Only
247269
// compute() should be used by external users.
248-
SizeOffsetAPInt visitAllocaInst(AllocaInst &I);
249-
SizeOffsetAPInt visitArgument(Argument &A);
250-
SizeOffsetAPInt visitCallBase(CallBase &CB);
251-
SizeOffsetAPInt visitConstantPointerNull(ConstantPointerNull &);
252-
SizeOffsetAPInt visitExtractElementInst(ExtractElementInst &I);
253-
SizeOffsetAPInt visitExtractValueInst(ExtractValueInst &I);
254-
SizeOffsetAPInt visitGlobalAlias(GlobalAlias &GA);
255-
SizeOffsetAPInt visitGlobalVariable(GlobalVariable &GV);
256-
SizeOffsetAPInt visitIntToPtrInst(IntToPtrInst &);
257-
SizeOffsetAPInt visitLoadInst(LoadInst &I);
258-
SizeOffsetAPInt visitPHINode(PHINode &);
259-
SizeOffsetAPInt visitSelectInst(SelectInst &I);
260-
SizeOffsetAPInt visitUndefValue(UndefValue &);
261-
SizeOffsetAPInt visitInstruction(Instruction &I);
270+
OffsetSpan visitAllocaInst(AllocaInst &I);
271+
OffsetSpan visitArgument(Argument &A);
272+
OffsetSpan visitCallBase(CallBase &CB);
273+
OffsetSpan visitConstantPointerNull(ConstantPointerNull &);
274+
OffsetSpan visitExtractElementInst(ExtractElementInst &I);
275+
OffsetSpan visitExtractValueInst(ExtractValueInst &I);
276+
OffsetSpan visitGlobalAlias(GlobalAlias &GA);
277+
OffsetSpan visitGlobalVariable(GlobalVariable &GV);
278+
OffsetSpan visitIntToPtrInst(IntToPtrInst &);
279+
OffsetSpan visitLoadInst(LoadInst &I);
280+
OffsetSpan visitPHINode(PHINode &);
281+
OffsetSpan visitSelectInst(SelectInst &I);
282+
OffsetSpan visitUndefValue(UndefValue &);
283+
OffsetSpan visitInstruction(Instruction &I);
262284

263285
private:
264-
SizeOffsetAPInt findLoadSizeOffset(
265-
LoadInst &LoadFrom, BasicBlock &BB, BasicBlock::iterator From,
266-
SmallDenseMap<BasicBlock *, SizeOffsetAPInt, 8> &VisitedBlocks,
267-
unsigned &ScannedInstCount);
268-
SizeOffsetAPInt combineSizeOffset(SizeOffsetAPInt LHS, SizeOffsetAPInt RHS);
269-
SizeOffsetAPInt computeImpl(Value *V);
270-
SizeOffsetAPInt computeValue(Value *V);
286+
OffsetSpan
287+
findLoadOffsetRange(LoadInst &LoadFrom, BasicBlock &BB,
288+
BasicBlock::iterator From,
289+
SmallDenseMap<BasicBlock *, OffsetSpan, 8> &VisitedBlocks,
290+
unsigned &ScannedInstCount);
291+
OffsetSpan combineOffsetRange(OffsetSpan LHS, OffsetSpan RHS);
292+
OffsetSpan computeImpl(Value *V);
293+
OffsetSpan computeValue(Value *V);
271294
bool CheckedZextOrTrunc(APInt &I);
272295
};
273296

llvm/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1267,7 +1267,7 @@ class MachineIRBuilder {
12671267
/// \return a MachineInstrBuilder for the newly created instruction.
12681268
MachineInstrBuilder buildICmp(CmpInst::Predicate Pred, const DstOp &Res,
12691269
const SrcOp &Op0, const SrcOp &Op1,
1270-
std::optional<unsigned> Flags = std::nullopt);
1270+
std::optional<unsigned> Flgs = std::nullopt);
12711271

12721272
/// Build and insert a \p Res = G_FCMP \p Pred\p Op0, \p Op1
12731273
///

llvm/include/llvm/CodeGen/SelectionDAGNodes.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -411,14 +411,12 @@ struct SDNodeFlags {
411411
NoFPExcept = 1 << 12,
412412
// Instructions with attached 'unpredictable' metadata on IR level.
413413
Unpredictable = 1 << 13,
414-
// Compare instructions which may carry the samesign flag.
415-
SameSign = 1 << 14,
416414

417415
// NOTE: Please update LargestValue in LLVM_DECLARE_ENUM_AS_BITMASK below
418416
// the class definition when adding new flags.
419417

420418
PoisonGeneratingFlags = NoUnsignedWrap | NoSignedWrap | Exact | Disjoint |
421-
NonNeg | NoNaNs | NoInfs | SameSign,
419+
NonNeg | NoNaNs | NoInfs,
422420
};
423421

424422
/// Default constructor turns off all optimization flags.
@@ -440,7 +438,6 @@ struct SDNodeFlags {
440438
void setNoSignedWrap(bool b) { setFlag<NoSignedWrap>(b); }
441439
void setExact(bool b) { setFlag<Exact>(b); }
442440
void setDisjoint(bool b) { setFlag<Disjoint>(b); }
443-
void setSameSign(bool b) { setFlag<SameSign>(b); }
444441
void setNonNeg(bool b) { setFlag<NonNeg>(b); }
445442
void setNoNaNs(bool b) { setFlag<NoNaNs>(b); }
446443
void setNoInfs(bool b) { setFlag<NoInfs>(b); }
@@ -457,7 +454,6 @@ struct SDNodeFlags {
457454
bool hasNoSignedWrap() const { return Flags & NoSignedWrap; }
458455
bool hasExact() const { return Flags & Exact; }
459456
bool hasDisjoint() const { return Flags & Disjoint; }
460-
bool hasSameSign() const { return Flags & SameSign; }
461457
bool hasNonNeg() const { return Flags & NonNeg; }
462458
bool hasNoNaNs() const { return Flags & NoNaNs; }
463459
bool hasNoInfs() const { return Flags & NoInfs; }
@@ -477,7 +473,7 @@ struct SDNodeFlags {
477473
};
478474

479475
LLVM_DECLARE_ENUM_AS_BITMASK(decltype(SDNodeFlags::None),
480-
SDNodeFlags::SameSign);
476+
SDNodeFlags::Unpredictable);
481477

482478
inline SDNodeFlags operator|(SDNodeFlags LHS, SDNodeFlags RHS) {
483479
LHS |= RHS;

llvm/include/llvm/MC/MCDXContainerWriter.h

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
#define LLVM_MC_MCDXCONTAINERWRITER_H
1111

1212
#include "llvm/MC/MCObjectWriter.h"
13+
#include "llvm/MC/MCValue.h"
14+
#include "llvm/Support/EndianStream.h"
1315
#include "llvm/TargetParser/Triple.h"
1416

1517
namespace llvm {
@@ -31,15 +33,21 @@ class MCDXContainerTargetWriter : public MCObjectTargetWriter {
3133
}
3234
};
3335

34-
/// Construct a new DXContainer writer instance.
35-
///
36-
/// \param MOTW - The target specific DXContainer writer subclass.
37-
/// \param OS - The stream to write to.
38-
/// \returns The constructed object writer.
39-
std::unique_ptr<MCObjectWriter>
40-
createDXContainerObjectWriter(std::unique_ptr<MCDXContainerTargetWriter> MOTW,
41-
raw_pwrite_stream &OS);
36+
class DXContainerObjectWriter final : public MCObjectWriter {
37+
support::endian::Writer W;
38+
std::unique_ptr<MCDXContainerTargetWriter> TargetObjectWriter;
4239

40+
public:
41+
DXContainerObjectWriter(std::unique_ptr<MCDXContainerTargetWriter> MOTW,
42+
raw_pwrite_stream &OS)
43+
: W(OS, llvm::endianness::little), TargetObjectWriter(std::move(MOTW)) {}
44+
45+
void recordRelocation(MCAssembler &Asm, const MCFragment *Fragment,
46+
const MCFixup &Fixup, MCValue Target,
47+
uint64_t &FixedValue) override {}
48+
49+
uint64_t writeObject(MCAssembler &Asm) override;
50+
};
4351
} // end namespace llvm
4452

4553
#endif // LLVM_MC_MCDXCONTAINERWRITER_H

0 commit comments

Comments
 (0)