Skip to content

Commit aff1397

Browse files
Revert "[AArch64][SVE] Pair SVE fill/spill into LDP/STP with -msve-vector-bits=128." (llvm#134997)
Reverts llvm#134068 Caused a stage 2 build failure: https://lab.llvm.org/buildbot/#/builders/41/builds/6016 ``` FAILED: lib/Support/CMakeFiles/LLVMSupport.dir/Caching.cpp.o /home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/stage1.install/bin/clang++ -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/stage2/lib/Support -I/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/llvm/llvm/lib/Support -I/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/stage2/include -I/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/llvm/llvm/include -mcpu=neoverse-512tvb -mllvm -scalable-vectorization=preferred -mllvm -treat-scalable-fixed-error-as-warning=false -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Werror=global-constructors -O3 -DNDEBUG -std=c++17 -UNDEBUG -fno-exceptions -funwind-tables -fno-rtti -MD -MT lib/Support/CMakeFiles/LLVMSupport.dir/Caching.cpp.o -MF lib/Support/CMakeFiles/LLVMSupport.dir/Caching.cpp.o.d -o lib/Support/CMakeFiles/LLVMSupport.dir/Caching.cpp.o -c /home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/llvm/llvm/lib/Support/Caching.cpp Opcode has unknown scale! UNREACHABLE executed at ../llvm/llvm/lib/Target/AArch64/AArch64InstrInfo.cpp:4530! PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script. Stack dump: 0. Program arguments: /home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/stage1.install/bin/clang++ -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/stage2/lib/Support -I/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/llvm/llvm/lib/Support -I/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/stage2/include -I/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/llvm/llvm/include -mcpu=neoverse-512tvb -mllvm -scalable-vectorization=preferred -mllvm -treat-scalable-fixed-error-as-warning=false -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Werror=global-constructors -O3 -DNDEBUG -std=c++17 -UNDEBUG -fno-exceptions -funwind-tables -fno-rtti -MD -MT lib/Support/CMakeFiles/LLVMSupport.dir/Caching.cpp.o -MF lib/Support/CMakeFiles/LLVMSupport.dir/Caching.cpp.o.d -o lib/Support/CMakeFiles/LLVMSupport.dir/Caching.cpp.o -c /home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/llvm/llvm/lib/Support/Caching.cpp 1. <eof> parser at end of file 2. Code generation 3. Running pass 'Function Pass Manager' on module '/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/llvm/llvm/lib/Support/Caching.cpp'. 4. Running pass 'AArch64 load / store optimization pass' on function '@"_ZNSt17_Function_handlerIFN4llvm8ExpectedISt8functionIFNS1_ISt10unique_ptrINS0_16CachedFileStreamESt14default_deleteIS4_EEEEjRKNS0_5TwineEEEEEjNS0_9StringRefESB_EZNS0_10localCacheESB_SB_SB_S2_IFvjSB_S3_INS0_12MemoryBufferES5_ISH_EEEEE3$_0E9_M_invokeERKSt9_Any_dataOjOSF_SB_"' #0 0x0000b6eae9b67bf0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/stage1.install/bin/clang+++0x81c7bf0) #1 0x0000b6eae9b65aec llvm::sys::RunSignalHandlers() (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/stage1.install/bin/clang+++0x81c5aec) #2 0x0000b6eae9acd5f4 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0 #3 0x0000f16c1aff28f8 (linux-vdso.so.1+0x8f8) #4 0x0000f16c1aacf1f0 __pthread_kill_implementation ./nptl/pthread_kill.c:44:76 #5 0x0000f16c1aa8a67c gsignal ./signal/../sysdeps/posix/raise.c:27:6 #6 0x0000f16c1aa77130 abort ./stdlib/abort.c:81:7 #7 0x0000b6eae9ad6628 (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/stage1.install/bin/clang+++0x8136628) #8 0x0000b6eae72e95a8 (/home/tcwg-buildbot/worker/clang-aarch64-sve-vla-2stage/stage1.install/bin/clang+++0x59495a8) #9 0x0000b6eae74ca9a8 (anonymous namespace)::AArch64LoadStoreOpt::findMatchingInsn(llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>, (anonymous namespace)::LdStPairFlags&, unsigned int, bool) AArch64LoadStoreOptimizer.cpp:0:0 #10 0x0000b6eae74c85a8 (anonymous namespace)::AArch64LoadStoreOpt::tryToPairLdStInst(llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>&) AArch64LoadStoreOptimizer.cpp:0:0 #11 0x0000b6eae74c624c (anonymous namespace)::AArch64LoadStoreOpt::optimizeBlock(llvm::MachineBasicBlock&, bool) AArch64LoadStoreOptimizer.cpp:0:0 #12 0x0000b6eae74c429c (anonymous namespace)::AArch64LoadStoreOpt::runOnMachineFunction(llvm::MachineFunction&) AArch64LoadStoreOptimizer.cpp:0:0 ```
1 parent a29be9f commit aff1397

File tree

3 files changed

+1
-321
lines changed

3 files changed

+1
-321
lines changed

llvm/lib/Target/AArch64/AArch64InstrInfo.cpp

-15
Original file line numberDiff line numberDiff line change
@@ -2760,9 +2760,6 @@ bool AArch64InstrInfo::isPairableLdStInst(const MachineInstr &MI) {
27602760
case AArch64::LDRXpre:
27612761
case AArch64::LDURSWi:
27622762
case AArch64::LDRSWpre:
2763-
// SVE instructions.
2764-
case AArch64::LDR_ZXI:
2765-
case AArch64::STR_ZXI:
27662763
return true;
27672764
}
27682765
}
@@ -2915,18 +2912,6 @@ bool AArch64InstrInfo::isCandidateToMergeOrPair(const MachineInstr &MI) const {
29152912
return false;
29162913
}
29172914

2918-
// Pairing SVE fills/spills is only valid for little-endian targets that
2919-
// implement VLS 128.
2920-
switch (MI.getOpcode()) {
2921-
default:
2922-
break;
2923-
case AArch64::LDR_ZXI:
2924-
case AArch64::STR_ZXI:
2925-
if (!Subtarget.isLittleEndian() ||
2926-
Subtarget.getSVEVectorSizeInBits() != 128)
2927-
return false;
2928-
}
2929-
29302915
// Check if this load/store has a hint to avoid pair formation.
29312916
// MachineMemOperands hints are set by the AArch64StorePairSuppress pass.
29322917
if (isLdStPairSuppressed(MI))

llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp

+1-23
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,6 @@ static unsigned getMatchingNonSExtOpcode(unsigned Opc,
298298
case AArch64::STRXui:
299299
case AArch64::STRXpre:
300300
case AArch64::STURXi:
301-
case AArch64::STR_ZXI:
302301
case AArch64::LDRDui:
303302
case AArch64::LDURDi:
304303
case AArch64::LDRDpre:
@@ -317,7 +316,6 @@ static unsigned getMatchingNonSExtOpcode(unsigned Opc,
317316
case AArch64::LDRSui:
318317
case AArch64::LDURSi:
319318
case AArch64::LDRSpre:
320-
case AArch64::LDR_ZXI:
321319
return Opc;
322320
case AArch64::LDRSWui:
323321
return AArch64::LDRWui;
@@ -363,7 +361,6 @@ static unsigned getMatchingPairOpcode(unsigned Opc) {
363361
return AArch64::STPDpre;
364362
case AArch64::STRQui:
365363
case AArch64::STURQi:
366-
case AArch64::STR_ZXI:
367364
return AArch64::STPQi;
368365
case AArch64::STRQpre:
369366
return AArch64::STPQpre;
@@ -389,7 +386,6 @@ static unsigned getMatchingPairOpcode(unsigned Opc) {
389386
return AArch64::LDPDpre;
390387
case AArch64::LDRQui:
391388
case AArch64::LDURQi:
392-
case AArch64::LDR_ZXI:
393389
return AArch64::LDPQi;
394390
case AArch64::LDRQpre:
395391
return AArch64::LDPQpre;
@@ -1229,16 +1225,6 @@ AArch64LoadStoreOpt::mergePairedInsns(MachineBasicBlock::iterator I,
12291225
(void)MIBSXTW;
12301226
LLVM_DEBUG(dbgs() << " Extend operand:\n ");
12311227
LLVM_DEBUG(((MachineInstr *)MIBSXTW)->print(dbgs()));
1232-
} else if (Opc == AArch64::LDR_ZXI || Opc == AArch64::STR_ZXI) {
1233-
// We are combining SVE fill/spill to LDP/STP, so we need to use the Q
1234-
// variant of the registers.
1235-
MachineOperand &MOp0 = MIB->getOperand(0);
1236-
MachineOperand &MOp1 = MIB->getOperand(1);
1237-
assert(AArch64::ZPRRegClass.contains(MOp0.getReg()) &&
1238-
AArch64::ZPRRegClass.contains(MOp1.getReg()) && "Invalid register.");
1239-
MOp0.setReg(AArch64::Q0 + (MOp0.getReg() - AArch64::Z0));
1240-
MOp1.setReg(AArch64::Q0 + (MOp1.getReg() - AArch64::Z0));
1241-
LLVM_DEBUG(((MachineInstr *)MIB)->print(dbgs()));
12421228
} else {
12431229
LLVM_DEBUG(((MachineInstr *)MIB)->print(dbgs()));
12441230
}
@@ -2673,8 +2659,7 @@ bool AArch64LoadStoreOpt::tryToPairLdStInst(MachineBasicBlock::iterator &MBBI) {
26732659
// Get the needed alignments to check them if
26742660
// ldp-aligned-only/stp-aligned-only features are opted.
26752661
uint64_t MemAlignment = MemOp->getAlign().value();
2676-
uint64_t TypeAlignment =
2677-
Align(MemOp->getSize().getValue().getKnownMinValue()).value();
2662+
uint64_t TypeAlignment = Align(MemOp->getSize().getValue()).value();
26782663

26792664
if (MemAlignment < 2 * TypeAlignment) {
26802665
NumFailedAlignmentCheck++;
@@ -2835,18 +2820,11 @@ bool AArch64LoadStoreOpt::optimizeBlock(MachineBasicBlock &MBB,
28352820
}
28362821
// 3) Find loads and stores that can be merged into a single load or store
28372822
// pair instruction.
2838-
// When compiling for SVE 128, also try to combine SVE fill/spill
2839-
// instructions into LDP/STP.
28402823
// e.g.,
28412824
// ldr x0, [x2]
28422825
// ldr x1, [x2, #8]
28432826
// ; becomes
28442827
// ldp x0, x1, [x2]
2845-
// e.g.,
2846-
// ldr z0, [x2]
2847-
// ldr z1, [x2, #1, mul vl]
2848-
// ; becomes
2849-
// ldp q0, q1, [x2]
28502828

28512829
if (MBB.getParent()->getRegInfo().tracksLiveness()) {
28522830
DefinedInBB.clear();

llvm/test/CodeGen/AArch64/aarch64-sve-fill-spill-pair.ll

-283
This file was deleted.

0 commit comments

Comments
 (0)