Skip to content

Commit cfbd607

Browse files
Merge branch 'main' into sancovtracecallbacks
2 parents 5c1cc58 + ff7b42c commit cfbd607

File tree

14 files changed

+107
-35
lines changed

14 files changed

+107
-35
lines changed

llvm/include/llvm/ProfileData/MemProf.h

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,21 +1117,20 @@ template <typename FrameIdTy> class CallStackRadixTreeBuilder {
11171117

11181118
// Encode a call stack into RadixArray. Return the starting index within
11191119
// RadixArray.
1120-
LinearCallStackId
1121-
encodeCallStack(const llvm::SmallVector<FrameIdTy> *CallStack,
1122-
const llvm::SmallVector<FrameIdTy> *Prev,
1123-
std::optional<const llvm::DenseMap<FrameIdTy, LinearFrameId>>
1124-
MemProfFrameIndexes);
1120+
LinearCallStackId encodeCallStack(
1121+
const llvm::SmallVector<FrameIdTy> *CallStack,
1122+
const llvm::SmallVector<FrameIdTy> *Prev,
1123+
const llvm::DenseMap<FrameIdTy, LinearFrameId> *MemProfFrameIndexes);
11251124

11261125
public:
11271126
CallStackRadixTreeBuilder() = default;
11281127

11291128
// Build a radix tree array.
1130-
void build(llvm::MapVector<CallStackId, llvm::SmallVector<FrameIdTy>>
1131-
&&MemProfCallStackData,
1132-
std::optional<const llvm::DenseMap<FrameIdTy, LinearFrameId>>
1133-
MemProfFrameIndexes,
1134-
llvm::DenseMap<FrameIdTy, FrameStat> &FrameHistogram);
1129+
void
1130+
build(llvm::MapVector<CallStackId, llvm::SmallVector<FrameIdTy>>
1131+
&&MemProfCallStackData,
1132+
const llvm::DenseMap<FrameIdTy, LinearFrameId> *MemProfFrameIndexes,
1133+
llvm::DenseMap<FrameIdTy, FrameStat> &FrameHistogram);
11351134

11361135
ArrayRef<LinearFrameId> getRadixArray() const { return RadixArray; }
11371136

llvm/lib/Bitcode/Writer/BitcodeWriter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4235,7 +4235,7 @@ static DenseMap<CallStackId, LinearCallStackId> writeMemoryProfileRadixTree(
42354235
CallStackRadixTreeBuilder<LinearFrameId> Builder;
42364236
// We don't need a MemProfFrameIndexes map as we have already converted the
42374237
// full stack id hash to a linear offset into the StackIds array.
4238-
Builder.build(std::move(CallStacks), /*MemProfFrameIndexes=*/std::nullopt,
4238+
Builder.build(std::move(CallStacks), /*MemProfFrameIndexes=*/nullptr,
42394239
FrameHistogram);
42404240
Stream.EmitRecord(bitc::FS_CONTEXT_RADIX_TREE_ARRAY, Builder.getRadixArray(),
42414241
RadixAbbrev);

llvm/lib/CodeGen/MachineVerifier.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3033,7 +3033,11 @@ void MachineVerifier::checkLiveness(const MachineOperand *MO, unsigned MONum) {
30333033
if (!MOP.getReg().isPhysical())
30343034
continue;
30353035

3036-
if (llvm::is_contained(TRI->subregs(MOP.getReg()), Reg))
3036+
if (MOP.getReg() != Reg &&
3037+
all_of(TRI->regunits(Reg), [&](const MCRegUnit RegUnit) {
3038+
return llvm::is_contained(TRI->regunits(MOP.getReg()),
3039+
RegUnit);
3040+
}))
30373041
Bad = false;
30383042
}
30393043
}

llvm/lib/ProfileData/InstrProfWriter.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -351,9 +351,14 @@ bool InstrProfWriter::addMemProfCallStack(
351351

352352
bool InstrProfWriter::addMemProfData(memprof::IndexedMemProfData Incoming,
353353
function_ref<void(Error)> Warn) {
354-
// TODO: Once we remove support for MemProf format Version V1, assert that
355-
// the three components (frames, call stacks, and records) are either all
356-
// empty or populated.
354+
// Return immediately if everything is empty.
355+
if (Incoming.Frames.empty() && Incoming.CallStacks.empty() &&
356+
Incoming.Records.empty())
357+
return true;
358+
359+
// Otherwise, every component must be non-empty.
360+
assert(!Incoming.Frames.empty() && !Incoming.CallStacks.empty() &&
361+
!Incoming.Records.empty());
357362

358363
if (MemProfData.Frames.empty())
359364
MemProfData.Frames = std::move(Incoming.Frames);
@@ -636,7 +641,7 @@ writeMemProfCallStackArray(
636641
MemProfCallStackIndexes;
637642

638643
memprof::CallStackRadixTreeBuilder<memprof::FrameId> Builder;
639-
Builder.build(std::move(MemProfCallStackData), MemProfFrameIndexes,
644+
Builder.build(std::move(MemProfCallStackData), &MemProfFrameIndexes,
640645
FrameHistogram);
641646
for (auto I : Builder.getRadixArray())
642647
OS.write32(I);

llvm/lib/ProfileData/MemProf.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,7 @@ template <typename FrameIdTy>
335335
LinearCallStackId CallStackRadixTreeBuilder<FrameIdTy>::encodeCallStack(
336336
const llvm::SmallVector<FrameIdTy> *CallStack,
337337
const llvm::SmallVector<FrameIdTy> *Prev,
338-
std::optional<const llvm::DenseMap<FrameIdTy, LinearFrameId>>
339-
MemProfFrameIndexes) {
338+
const llvm::DenseMap<FrameIdTy, LinearFrameId> *MemProfFrameIndexes) {
340339
// Compute the length of the common root prefix between Prev and CallStack.
341340
uint32_t CommonLen = 0;
342341
if (Prev) {
@@ -381,8 +380,7 @@ template <typename FrameIdTy>
381380
void CallStackRadixTreeBuilder<FrameIdTy>::build(
382381
llvm::MapVector<CallStackId, llvm::SmallVector<FrameIdTy>>
383382
&&MemProfCallStackData,
384-
std::optional<const llvm::DenseMap<FrameIdTy, LinearFrameId>>
385-
MemProfFrameIndexes,
383+
const llvm::DenseMap<FrameIdTy, LinearFrameId> *MemProfFrameIndexes,
386384
llvm::DenseMap<FrameIdTy, FrameStat> &FrameHistogram) {
387385
// Take the vector portion of MemProfCallStackData. The vector is exactly
388386
// what we need to sort. Also, we no longer need its lookup capability.

llvm/lib/Target/RISCV/RISCVInstrInfoD.td

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,8 @@ def : Pat<(riscv_fclass FPR64:$rs1), (FCLASS_D $rs1)>;
285285

286286
def : PatFprFpr<fcopysign, FSGNJ_D, FPR64, f64>;
287287
def : PatFprFpr<riscv_fsgnjx, FSGNJX_D, FPR64, f64>;
288-
def : Pat<(fcopysign FPR64:$rs1, (fneg FPR64:$rs2)), (FSGNJN_D $rs1, $rs2)>;
288+
def : Pat<(fcopysign FPR64:$rs1, (fneg FPR64:$rs2)),
289+
(FSGNJN_D FPR64:$rs1, FPR64:$rs2)>;
289290
def : Pat<(fcopysign FPR64:$rs1, FPR32:$rs2), (FSGNJ_D $rs1, (FCVT_D_S $rs2,
290291
FRM_RNE))>;
291292
def : Pat<(fcopysign FPR32:$rs1, FPR64:$rs2), (FSGNJ_S $rs1, (FCVT_S_D $rs2,
@@ -323,7 +324,7 @@ def : Pat<(riscv_fclass FPR64INX:$rs1), (FCLASS_D_INX $rs1)>;
323324
def : PatFprFpr<fcopysign, FSGNJ_D_INX, FPR64INX, f64>;
324325
def : PatFprFpr<riscv_fsgnjx, FSGNJX_D_INX, FPR64INX, f64>;
325326
def : Pat<(fcopysign FPR64INX:$rs1, (fneg FPR64INX:$rs2)),
326-
(FSGNJN_D_INX $rs1, $rs2)>;
327+
(FSGNJN_D_INX FPR64INX:$rs1, FPR64INX:$rs2)>;
327328
def : Pat<(fcopysign FPR64INX:$rs1, FPR32INX:$rs2),
328329
(FSGNJ_D_INX $rs1, (f64 (FCVT_D_S_INX $rs2, FRM_RNE)))>;
329330
def : Pat<(fcopysign FPR32INX:$rs1, FPR64INX:$rs2),
@@ -361,7 +362,7 @@ def : Pat<(riscv_fclass FPR64IN32X:$rs1), (FCLASS_D_IN32X $rs1)>;
361362
def : PatFprFpr<fcopysign, FSGNJ_D_IN32X, FPR64IN32X, f64>;
362363
def : PatFprFpr<riscv_fsgnjx, FSGNJX_D_IN32X, FPR64IN32X, f64>;
363364
def : Pat<(fcopysign FPR64IN32X:$rs1, (fneg FPR64IN32X:$rs2)),
364-
(FSGNJN_D_IN32X $rs1, $rs2)>;
365+
(FSGNJN_D_IN32X FPR64IN32X:$rs1, FPR64IN32X:$rs2)>;
365366
def : Pat<(fcopysign FPR64IN32X:$rs1, FPR32INX:$rs2),
366367
(FSGNJ_D_IN32X $rs1, (FCVT_D_S_IN32X $rs2, FRM_RNE))>;
367368
def : Pat<(fcopysign FPR32INX:$rs1, FPR64IN32X:$rs2),

llvm/lib/Target/RISCV/RISCVInstrInfoF.td

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,8 @@ defm : PatFprFpr_m<riscv_fsgnjx, FSGNJX_S, Ext>;
570570
}
571571

572572
let Predicates = [HasStdExtF] in {
573-
def : Pat<(fcopysign FPR32:$rs1, (fneg FPR32:$rs2)), (FSGNJN_S $rs1, $rs2)>;
573+
def : Pat<(fcopysign FPR32:$rs1, (fneg FPR32:$rs2)),
574+
(FSGNJN_S FPR32:$rs1, FPR32:$rs2)>;
574575

575576
// fmadd: rs1 * rs2 + rs3
576577
def : Pat<(any_fma FPR32:$rs1, FPR32:$rs2, FPR32:$rs3),
@@ -594,7 +595,8 @@ def : Pat<(fneg (any_fma_nsz FPR32:$rs1, FPR32:$rs2, FPR32:$rs3)),
594595
} // Predicates = [HasStdExtF]
595596

596597
let Predicates = [HasStdExtZfinx] in {
597-
def : Pat<(fcopysign FPR32INX:$rs1, (fneg FPR32INX:$rs2)), (FSGNJN_S_INX $rs1, $rs2)>;
598+
def : Pat<(fcopysign FPR32INX:$rs1, (fneg FPR32INX:$rs2)),
599+
(FSGNJN_S_INX FPR32INX:$rs1, FPR32INX:$rs2)>;
598600

599601
// fmadd: rs1 * rs2 + rs3
600602
def : Pat<(any_fma FPR32INX:$rs1, FPR32INX:$rs2, FPR32INX:$rs3),

llvm/lib/Target/RISCV/RISCVInstrInfoZfh.td

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,8 @@ def : Pat<(riscv_fclass (f16 FPR16:$rs1)), (FCLASS_H $rs1)>;
291291

292292
def : PatFprFpr<fcopysign, FSGNJ_H, FPR16, f16>;
293293
def : PatFprFpr<riscv_fsgnjx, FSGNJX_H, FPR16, f16>;
294-
def : Pat<(f16 (fcopysign FPR16:$rs1, (f16 (fneg FPR16:$rs2)))), (FSGNJN_H $rs1, $rs2)>;
294+
def : Pat<(f16 (fcopysign FPR16:$rs1, (f16 (fneg FPR16:$rs2)))),
295+
(FSGNJN_H FPR16:$rs1, FPR16:$rs2)>;
295296
def : Pat<(f16 (fcopysign FPR16:$rs1, FPR32:$rs2)),
296297
(FSGNJ_H $rs1, (f16 (FCVT_H_S $rs2, FRM_DYN)))>;
297298

@@ -334,7 +335,8 @@ def : Pat<(riscv_fclass FPR16INX:$rs1), (FCLASS_H_INX $rs1)>;
334335

335336
def : PatFprFpr<fcopysign, FSGNJ_H_INX, FPR16INX, f16>;
336337
def : PatFprFpr<riscv_fsgnjx, FSGNJX_H_INX, FPR16INX, f16>;
337-
def : Pat<(fcopysign FPR16INX:$rs1, (fneg FPR16INX:$rs2)), (FSGNJN_H_INX $rs1, $rs2)>;
338+
def : Pat<(fcopysign FPR16INX:$rs1, (fneg FPR16INX:$rs2)),
339+
(FSGNJN_H_INX FPR16INX:$rs1, FPR16INX:$rs2)>;
338340
def : Pat<(fcopysign FPR16INX:$rs1, FPR32INX:$rs2),
339341
(FSGNJ_H_INX $rs1, (FCVT_H_S_INX $rs2, FRM_DYN))>;
340342

llvm/test/CodeGen/RISCV/GlobalISel/double-arith.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,7 @@ define double @fsgnjn_d(double %a, double %b) nounwind {
186186
;
187187
; CHECKIFD-LABEL: fsgnjn_d:
188188
; CHECKIFD: # %bb.0:
189-
; CHECKIFD-NEXT: fneg.d fa5, fa1
190-
; CHECKIFD-NEXT: fsgnj.d fa0, fa0, fa5
189+
; CHECKIFD-NEXT: fsgnjn.d fa0, fa0, fa1
191190
; CHECKIFD-NEXT: ret
192191
;
193192
; RV32I-LABEL: fsgnjn_d:

llvm/test/CodeGen/RISCV/GlobalISel/float-arith.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,7 @@ define float @fsgnjn_s(float %a, float %b) nounwind {
183183
; CHECKIF-LABEL: fsgnjn_s:
184184
; CHECKIF: # %bb.0:
185185
; CHECKIF-NEXT: fadd.s fa5, fa0, fa1
186-
; CHECKIF-NEXT: fneg.s fa5, fa5
187-
; CHECKIF-NEXT: fsgnj.s fa0, fa0, fa5
186+
; CHECKIF-NEXT: fsgnjn.s fa0, fa0, fa5
188187
; CHECKIF-NEXT: ret
189188
;
190189
; RV32I-LABEL: fsgnjn_s:

0 commit comments

Comments
 (0)