================ @@ -0,0 +1,65 @@ +; RUN: llc --verify-machineinstrs < %s +source_filename = "test.cpp" +target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +target triple = "x86_64-pc-windows-msvc19.12.0" + +$"?test@Test@@Plugin@@Host@@@Z" = comdat any + +declare i32 @__CxxFrameHandler3(...) + +; Function Attrs: nounwind memory(none) +declare void @llvm.seh.scope.begin() #1 + +; Function Attrs: nobuiltin allocsize(0) +declare ptr @"??2@Test@Z"(i64) #1 + +; Function Attrs: nounwind memory(none) +declare void @llvm.seh.scope.end() #0 + +; Function Attrs: nobuiltin nounwind +declare void @"??3@YAXPEAX@Z"(ptr) #2 + +; Function Attrs: mustprogress uwtable +define ptr @"?test@Test@@Plugin@@Host@@@Z"(ptr %this, ptr %host) #3 comdat align 2 personality ptr @__CxxFrameHandler3 { +entry: + %host.addr = alloca ptr, align 8 + %this.addr = alloca ptr, align 8 + store ptr %host, ptr %host.addr, align 8 + store ptr %this, ptr %this.addr, align 8 + %this1 = load ptr, ptr %this.addr, align 8 + %call = call noalias ptr @"??2@Test@Z"(i64 152) #5 ---------------- HaohaiWen wrote:
``` // Check that VNI is live-out of all predecessors. for (const MachineBasicBlock *Pred : MFI->predecessors()) { SlotIndex PEnd = LiveInts->getMBBEndIdx(Pred); // Predecessor of landing pad live-out on last call for sync EH. if (MFI->isEHPad()) { assert(!IsEHa && "EHa may raise exception on non call"); for (const MachineInstr &MI : llvm::reverse(*Pred)) { if (MI.isCall()) { PEnd = Indexes->getInstructionIndex(MI).getBoundaryIndex(); break; } } } const VNInfo *PVNI = LR.getVNInfoBefore(PEnd); ``` Verifier think exception raised only by call so it trims live range until call. From bellowing log we can see %1 was defined after call but before scope.begin. It's valid. ``` # After Register Coalescer ********** INTERVALS ********** CH [0B,32r:0)[112r,128r:3)[304r,336r:2)[544r,560r:1) 0@0B-phi 1@544r 2@304r 3@112r CL [0B,32r:0)[112r,128r:3)[304r,336r:2)[544r,560r:1) 0@0B-phi 1@544r 2@304r 3@112r DH [0B,16r:0)[320r,336r:1) 0@0B-phi 1@320r DL [0B,16r:0)[320r,336r:1) 0@0B-phi 1@320r HCX [0B,32r:0)[112r,128r:3)[304r,336r:2)[544r,560r:1) 0@0B-phi 1@544r 2@304r 3@112r HDX [0B,16r:0)[320r,336r:1) 0@0B-phi 1@320r %0 [32r,320r:0) 0@32r weight:0.000000e+00 %1 [160r,464r:0)[496B,544r:0) 0@160r weight:0.000000e+00 %3 [16r,64r:0) 0@16r weight:0.000000e+00 RegMasks: 128r 336r 496B 560r ********** MACHINEINSTRS ********** # Machine code for function ?test@Test@@Plugin@@Host@@@Z: NoPHIs, TracksLiveness, TiedOpsRewritten Frame Objects: fi#0: size=8, align=8, at location [SP+8] fi#1: size=8, align=8, at location [SP+8] Function Live Ins: $rcx in %2, $rdx in %3 0B bb.0.entry: successors: %bb.1(0x7ffff800), %bb.4(0x00000800); %bb.1(100.00%), %bb.4(0.00%) liveins: $rcx, $rdx 16B %3:gr64 = COPY $rdx 32B %0:gr64 = COPY $rcx 48B EH_LABEL <mcsymbol .Ltmp2> 64B MOV64mr %stack.0.host.addr, 1, $noreg, 0, $noreg, %3:gr64 :: (store (s64) into %ir.host.addr) 80B MOV64mr %stack.1.this.addr, 1, $noreg, 0, $noreg, %0:gr64 :: (store (s64) into %ir.this.addr) 96B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 112B $rcx = MOV32ri64 152 128B CALL64pcrel32 @"??2@Test@Z", <regmask $bh $bl $bp $bph $bpl $bx $di $dih $dil $ebp $ebx $edi $esi $hbp $hbx $hdi $hsi $rbp $rbx $rdi $rsi $si $sih $sil $r12 $r13 $r14 $r15 $xmm6 $xmm7 $xmm8 $xmm9 $xmm10 and 25 more...>, implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp, implicit-def $rax 144B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 160B %1:gr64 = COPY killed $rax 192B EH_LABEL <mcsymbol .Ltmp3> 208B JMP_1 %bb.1 224B bb.1.invoke.cont: ; predecessors: %bb.0 successors: %bb.2(0x7ffff800), %bb.4(0x00000800); %bb.2(100.00%), %bb.4(0.00%) 240B EH_LABEL <mcsymbol .Ltmp4> 256B EH_LABEL <mcsymbol .Ltmp0> 288B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 304B $rcx = COPY %1:gr64 320B $rdx = COPY %0:gr64 336B CALL64pcrel32 @"??Test@?A0x2749C4FD@@QEAA@Test@Test@@@Z", <regmask $bh $bl $bp $bph $bpl $bx $di $dih $dil $ebp $ebx $edi $esi $hbp $hbx $hdi $hsi $rbp $rbx $rdi $rsi $si $sih $sil $r12 $r13 $r14 $r15 $xmm6 $xmm7 $xmm8 $xmm9 $xmm10 and 25 more...>, implicit $rsp, implicit $ssp, implicit $rcx, implicit $rdx, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax 352B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 368B EH_LABEL <mcsymbol .Ltmp1> 384B EH_LABEL <mcsymbol .Ltmp5> 400B JMP_1 %bb.2 416B bb.2.invoke.cont2: ; predecessors: %bb.1 successors: %bb.3(0x7ffff800), %bb.4(0x00000800); %bb.3(100.00%), %bb.4(0.00%) 432B JMP_1 %bb.3 448B bb.3.invoke.cont4: ; predecessors: %bb.2 464B $rax = COPY %1:gr64 480B RET 0, killed $rax 496B bb.4.ehcleanup (machine-block-address-taken, landing-pad, ehfunclet-entry): ; predecessors: %bb.0, %bb.1, %bb.2 512B EH_LABEL <mcsymbol .Ltmp6> 528B ADJCALLSTACKDOWN64 32, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 544B $rcx = COPY %1:gr64 560B CALL64pcrel32 @"??3@YAXPEAX@Z", <regmask $bh $bl $bp $bph $bpl $bx $di $dih $dil $ebp $ebx $edi $esi $hbp $hbx $hdi $hsi $rbp $rbx $rdi $rsi $si $sih $sil $r12 $r13 $r14 $r15 $xmm6 $xmm7 $xmm8 $xmm9 $xmm10 and 25 more...>, implicit $rsp, implicit $ssp, implicit $rcx, implicit-def $rsp, implicit-def $ssp 576B ADJCALLSTACKUP64 32, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 592B EH_LABEL <mcsymbol .Ltmp7> 608B CLEANUPRET # End machine code for function ?test@Test@@Plugin@@Host@@@Z. *** Bad machine code: Register not marked live out of predecessor *** - function: ?test@Test@@Plugin@@Host@@@Z - basic block: %bb.0 entry (0x363f3c8) [0B;224B) - liverange: [160r,464r:0)[496B,544r:0) 0@160r - v. register: %1 - ValNo: 0 (def 160r) live into %bb.4@496B, not live before 128d LLVM ERROR: Found 1 machine code errors. PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. Stack dump: 0. Program arguments: llc --verify-machineinstrs 1. Running pass 'Function Pass Manager' on module '<stdin>'. 2. Running pass 'Verify generated machine code' on function '@"?test@Test@@Plugin@@Host@@@Z"' #0 0x0000000001b00f98 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /export/users2/haohaiwe/compilers/llvm-project/llvm/lib/Support/Unix/Signals.inc:727:3 #1 0x0000000001afea4c llvm::sys::RunSignalHandlers() /export/users2/haohaiwe/compilers/llvm-project/llvm/lib/Support/Signals.cpp:105:20 #2 0x0000000001afed86 SignalHandler(int) /export/users2/haohaiwe/compilers/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1 #3 0x00007fb166bf4db0 __restore_rt (/lib64/libc.so.6+0x59db0) #4 0x00007fb166c4142c __pthread_kill_implementation (/lib64/libc.so.6+0xa642c) #5 0x00007fb166bf4d06 gsignal (/lib64/libc.so.6+0x59d06) #6 0x00007fb166bc77d3 abort (/lib64/libc.so.6+0x2c7d3) #7 0x000000000064d9ce llvm::ConvertUTF8toUTF32Impl(unsigned char const**, unsigned char const*, unsigned int**, unsigned int*, llvm::ConversionFlags, unsigned char) (.cold) /export/users2/haohaiwe/compilers/llvm-project/llvm/lib/Support/ConvertUTF.cpp:691:9 #8 0x0000000000ff978b (/export/users2/haohaiwe/compilers/llvm-project/builds/bin/llc+0xff978b) #9 0x0000000000ff97bb (anonymous namespace)::MachineVerifierPass::runOnMachineFunction(llvm::MachineFunction&) /export/users2/haohaiwe/compilers/llvm-project/llvm/lib/CodeGen/MachineVerifier.cpp:328:5 #10 0x0000000000ef20c7 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) /export/users2/haohaiwe/compilers/llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:93:33 #11 0x000000000142ceae llvm::FPPassManager::runOnFunction(llvm::Function&) /export/users2/haohaiwe/compilers/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1453:7 #12 0x000000000142d0d1 llvm::ilist_node_base<true>::getNext() const /export/users2/haohaiwe/compilers/llvm-project/llvm/include/llvm/ADT/ilist_node_base.h:43:45 #13 0x000000000142d0d1 llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Function, true, false, void, false>>::getNext() /export/users2/haohaiwe/compilers/llvm-project/llvm/include/llvm/ADT/ilist_node.h:94:66 #14 0x000000000142d0d1 llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Function, true, false, void, false>, false, false>::operator++() /export/users2/haohaiwe/compilers/llvm-project/llvm/include/llvm/ADT/ilist_iterator.h:157:25 #15 0x000000000142d0d1 llvm::FPPassManager::runOnModule(llvm::Module&) /export/users2/haohaiwe/compilers/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1488:22 #16 0x000000000142d91e runOnModule /export/users2/haohaiwe/compilers/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1565:7 #17 0x000000000142d91e llvm::legacy::PassManagerImpl::run(llvm::Module&) /export/users2/haohaiwe/compilers/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:541:55 #18 0x00000000006c946d compileModule(char**, llvm::LLVMContext&) /export/users2/haohaiwe/compilers/llvm-project/llvm/tools/llc/llc.cpp:751:34 #19 0x0000000000652206 main /export/users2/haohaiwe/compilers/llvm-project/llvm/tools/llc/llc.cpp:425:35 #20 0x00007fb166bdfe50 __libc_start_call_main (/lib64/libc.so.6+0x44e50) #21 0x00007fb166bdfefc __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x44efc) #22 0x00000000006c09a5 _start (/export/users2/haohaiwe/compilers/llvm-project/builds/bin/llc+0x6c09a5) ``` https://github.com/llvm/llvm-project/pull/76933 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits