`MSP430InstrInfo::loadRegFromStackSlot` forgets to set register def.
...
Summary:
For instance, compiling the below results in a panic:
```
llc: ../lib/CodeGen/InlineSpiller.cpp:1140: bool (anonymous namespace)::InlineSpiller::foldMemoryOperand(ArrayRef<std::pair<MachineInstr *, unsigned int> >, llvm::MachineInstr *): Assertion `MO->isDead() && "Cannot fold physreg def"' failed.
#0 0x00007f50fbcf353e llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/h/3rd/llvm/build/../lib/Support/Unix/Signals.inc:321:15
#1 0x00007f50fbcf3929 PrintStackTraceSignalHandler(void*) /home/h/3rd/llvm/build/../lib/Support/Unix/Signals.inc:380:1
#2 0x00007f50fbcf22a3 llvm::sys::RunSignalHandlers() /home/h/3rd/llvm/build/../lib/Support/Signals.cpp:45:5
#3 0x00007f50fbcf3bb4 SignalHandler(int) /home/h/3rd/llvm/build/../lib/Support/Unix/Signals.inc:210:1
#4 0x00007f50fa87a180 (/lib/x86_64-linux-gnu/libc.so.6+0x35180)
#5 0x00007f50fa87a107 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x35107)
#6 0x00007f50fa87b4e8 abort (/lib/x86_64-linux-gnu/libc.so.6+0x364e8)
#7 0x00007f50fa873226 (/lib/x86_64-linux-gnu/libc.so.6+0x2e226)
#8 0x00007f50fa8732d2 (/lib/x86_64-linux-gnu/libc.so.6+0x2e2d2)
#9 0x00007f50fddd9287 (anonymous namespace)::InlineSpiller::foldMemoryOperand(llvm::ArrayRef<std::pair<llvm::MachineInstr*, unsigned int> >, llvm::MachineInstr*) /home/h/3rd/llvm/build/../lib/CodeGen/InlineSpiller.cpp:1141:21
#10 0x00007f50fddd9ee9 (anonymous namespace)::InlineSpiller::spillAroundUses(unsigned int) /home/h/3rd/llvm/build/../lib/CodeGen/InlineSpiller.cpp:1286:9
#11 0x00007f50fddd388b (anonymous namespace)::InlineSpiller::spillAll() /home/h/3rd/llvm/build/../lib/CodeGen/InlineSpiller.cpp:1338:21
#12 0x00007f50fddd221d (anonymous namespace)::InlineSpiller::spill(llvm::LiveRangeEdit&) /home/h/3rd/llvm/build/../lib/CodeGen/InlineSpiller.cpp:1391:3
#13 0x00007f50fdfd921b (anonymous namespace)::RAGreedy::selectOrSplitImpl(llvm::LiveInterval&, llvm::SmallVectorImpl<unsigned int>&, llvm::SmallSet<unsigned int, 16u, std::less<unsigned int> >&, unsigned int) /home/h/3rd/llvm/build/../lib/CodeGen/RegAllocGreedy.cpp:2555:5
#14 0x00007f50fdfd647b (anonymous namespace)::RAGreedy::selectOrSplit(llvm::LiveInterval&, llvm::SmallVectorImpl<unsigned int>&) /home/h/3rd/llvm/build/../lib/CodeGen/RegAllocGreedy.cpp:2221:12
#15 0x00007f50fdfc89f9 llvm::RegAllocBase::allocatePhysRegs() /home/h/3rd/llvm/build/../lib/CodeGen/RegAllocBase.cpp:110:14
#16 0x00007f50fdfd6337 (anonymous namespace)::RAGreedy::runOnMachineFunction(llvm::MachineFunction&) /home/h/3rd/llvm/build/../lib/CodeGen/RegAllocGreedy.cpp:2611:3
#17 0x00007f50fded33ee llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/h/3rd/llvm/build/../lib/CodeGen/MachineFunctionPass.cpp:43:3
#18 0x00007f50fd6cdc6f llvm::FPPassManager::runOnFunction(llvm::Function&) /home/h/3rd/llvm/build/../lib/IR/LegacyPassManager.cpp:1550:23
#19 0x00007f50fd6cdf85 llvm::FPPassManager::runOnModule(llvm::Module&) /home/h/3rd/llvm/build/../lib/IR/LegacyPassManager.cpp:1571:16
#20 0x00007f50fd6ce71a (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/h/3rd/llvm/build/../lib/IR/LegacyPassManager.cpp:1627:23
#21 0x00007f50fd6ce246 llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/h/3rd/llvm/build/../lib/IR/LegacyPassManager.cpp:1730:16
#22 0x00007f50fd6cec31 llvm::legacy::PassManager::run(llvm::Module&) /home/h/3rd/llvm/build/../lib/IR/LegacyPassManager.cpp:1761:3
#23 0x0000000000415bdc compileModule(char**, llvm::LLVMContext&) /home/h/3rd/llvm/build/../tools/llc/llc.cpp:405:5
#24 0x0000000000414571 main /home/h/3rd/llvm/build/../tools/llc/llc.cpp:211:13
#25 0x00007f50fa866b45 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b45)
#26 0x0000000000414296 _start (/home/h/3rd/llvm/build/bin/llc+0x414296)
Stack dump:
0. Program arguments: ./bin/llc -mtriple msp430 loadstore.ll
1. Running pass 'Function Pass Manager' on module 'loadstore.ll'.
2. Running pass 'Greedy Register Allocator' on function '@inc'
```
Original IR:
```llvm
%struct.VeryLarge = type { i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
; Function Attrs: norecurse nounwind
define void @inc(%struct.VeryLarge* noalias nocapture sret %agg.result, %struct.VeryLarge* byval align 1 %s) #0 {
entry:
%p0 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 0
%0 = load i8, i8* %p0, align 1, !tbaa !1
%p1 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 1
%1 = load i32, i32* %p1, align 1, !tbaa !6
%p2 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 2
%2 = load i32, i32* %p2, align 1, !tbaa !7
%p3 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 3
%3 = load i32, i32* %p3, align 1, !tbaa !8
%p4 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 4
%4 = load i32, i32* %p4, align 1, !tbaa !9
%p5 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 5
%5 = load i32, i32* %p5, align 1, !tbaa !10
%p6 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 6
%6 = load i32, i32* %p6, align 1, !tbaa !11
%p7 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 7
%7 = load i32, i32* %p7, align 1, !tbaa !12
%p8 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 8
%8 = load i32, i32* %p8, align 1, !tbaa !13
%p9 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 9
%9 = load i32, i32* %p9, align 1, !tbaa !14
%p10 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 10
%10 = load i32, i32* %p10, align 1, !tbaa !15
%p11 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 11
%11 = load i32, i32* %p11, align 1, !tbaa !16
%p12 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 12
%12 = load i32, i32* %p12, align 1, !tbaa !17
%p13 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 13
%13 = load i32, i32* %p13, align 1, !tbaa !18
%p14 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 14
%14 = load i32, i32* %p14, align 1, !tbaa !19
%p15 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 15
%15 = load i32, i32* %p15, align 1, !tbaa !20
%p16 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 16
%16 = load i32, i32* %p16, align 1, !tbaa !21
%p17 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 17
%17 = load i32, i32* %p17, align 1, !tbaa !22
%p18 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 18
%18 = load i32, i32* %p18, align 1, !tbaa !23
%p19 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 19
%19 = load i32, i32* %p19, align 1, !tbaa !24
%p20 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 20
%20 = load i32, i32* %p20, align 1, !tbaa !25
%p21 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 21
%21 = load i32, i32* %p21, align 1, !tbaa !26
%p22 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 22
%22 = load i32, i32* %p22, align 1, !tbaa !27
%p23 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 23
%23 = load i32, i32* %p23, align 1, !tbaa !28
%p24 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 24
%24 = load i32, i32* %p24, align 1, !tbaa !29
%p25 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 25
%25 = load i32, i32* %p25, align 1, !tbaa !30
%p26 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 26
%26 = load i32, i32* %p26, align 1, !tbaa !31
%p27 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 27
%27 = load i32, i32* %p27, align 1, !tbaa !32
%p28 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 28
%28 = load i32, i32* %p28, align 1, !tbaa !33
%p29 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 29
%29 = load i32, i32* %p29, align 1, !tbaa !34
%p30 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 30
%30 = load i32, i32* %p30, align 1, !tbaa !35
%p31 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 31
%31 = load i32, i32* %p31, align 1, !tbaa !36
%p32 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 32
%32 = load i32, i32* %p32, align 1, !tbaa !37
%add = add i8 %0, 1
store i8 %add, i8* %p0, align 1, !tbaa !1
%add2 = add i32 %1, 2
store i32 %add2, i32* %p1, align 1, !tbaa !6
%add3 = add i32 %2, 3
store i32 %add3, i32* %p2, align 1, !tbaa !7
%add4 = add i32 %3, 4
store i32 %add4, i32* %p3, align 1, !tbaa !8
%add5 = add i32 %4, 5
store i32 %add5, i32* %p4, align 1, !tbaa !9
%add6 = add i32 %5, 6
store i32 %add6, i32* %p5, align 1, !tbaa !10
%add7 = add i32 %6, 7
store i32 %add7, i32* %p6, align 1, !tbaa !11
%add8 = add i32 %7, 8
store i32 %add8, i32* %p7, align 1, !tbaa !12
%add9 = add i32 %8, 9
store i32 %add9, i32* %p8, align 1, !tbaa !13
%add10 = add i32 %9, 10
store i32 %add10, i32* %p9, align 1, !tbaa !14
%add11 = add i32 %10, 11
store i32 %add11, i32* %p10, align 1, !tbaa !15
%add12 = add i32 %11, 12
store i32 %add12, i32* %p11, align 1, !tbaa !16
%add13 = add i32 %12, 13
store i32 %add13, i32* %p12, align 1, !tbaa !17
%add14 = add i32 %13, 14
store i32 %add14, i32* %p13, align 1, !tbaa !18
%add15 = add i32 %14, 15
store i32 %add15, i32* %p14, align 1, !tbaa !19
%add16 = add i32 %15, 16
store i32 %add16, i32* %p15, align 1, !tbaa !20
%add17 = add i32 %16, 17
store i32 %add17, i32* %p16, align 1, !tbaa !21
%add18 = add i32 %17, 18
store i32 %add18, i32* %p17, align 1, !tbaa !22
%add19 = add i32 %18, 19
store i32 %add19, i32* %p18, align 1, !tbaa !23
%add20 = add i32 %19, 20
store i32 %add20, i32* %p19, align 1, !tbaa !24
%add21 = add i32 %20, 21
store i32 %add21, i32* %p20, align 1, !tbaa !25
%add22 = add i32 %21, 22
store i32 %add22, i32* %p21, align 1, !tbaa !26
%add23 = add i32 %22, 23
store i32 %add23, i32* %p22, align 1, !tbaa !27
%add24 = add i32 %23, 24
store i32 %add24, i32* %p23, align 1, !tbaa !28
%add25 = add i32 %24, 25
store i32 %add25, i32* %p24, align 1, !tbaa !29
%add26 = add i32 %25, 26
store i32 %add26, i32* %p25, align 1, !tbaa !30
%add27 = add i32 %26, 27
store i32 %add27, i32* %p26, align 1, !tbaa !31
%add28 = add i32 %27, 28
store i32 %add28, i32* %p27, align 1, !tbaa !32
%add29 = add i32 %28, 29
store i32 %add29, i32* %p28, align 1, !tbaa !33
%add30 = add i32 %29, 30
store i32 %add30, i32* %p29, align 1, !tbaa !34
%add31 = add i32 %30, 31
store i32 %add31, i32* %p30, align 1, !tbaa !35
%add32 = add i32 %31, 32
store i32 %add32, i32* %p31, align 1, !tbaa !36
%add33 = add i32 %32, 33
store i32 %add33, i32* %p32, align 1, !tbaa !37
%33 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %agg.result, i32 0, i32 0
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %33, i8* %p0, i32 129, i32 1, i1 false), !tbaa.struct !38
ret void
}
; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i32, i1) #1
attributes #0 = { norecurse nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { argmemonly nounwind }
!llvm.ident = !{!0}
!0 = !{!"clang version 3.8.0 (git://github.com/llvm-mirror/clang 40ef2b7531472c41212c4719a9294aeb7bddebbc) (git://github.com/llvm-mirror/llvm c601eaf55606dfb9ad372b514b77aa00d1409be1)"}
!1 = !{!2, !3 , i64 0}
!2 = !{!"", !3 , i64 0, !5 , i64 1, !5 , i64 5, !5 , i64 9, !5 , i64 13, !5 , i64 17, !5 , i64 21, !5 , i64 25, !5 , i64 29, !5 , i64 33, !5 , i64 37, !5 , i64 41, !5 , i64 45, !5 , i64 49, !5 , i64 53, !5 , i64 57, !5 , i64 61, !5 , i64 65, !5 , i64 69, !5 , i64 73, !5 , i64 77, !5 , i64 81, !5 , i64 85, !5 , i64 89, !5 , i64 93, !5 , i64 97, !5 , i64 101, !5 , i64 105, !5 , i64 109, !5 , i64 113, !5 , i64 117, !5 , i64 121, !5 , i64 125}
!3 = !{!"omnipotent char", !4 , i64 0}
!4 = !{!"Simple C/C++ TBAA"}
!5 = !{!"int", !3 , i64 0}
!6 = !{!2, !5 , i64 1}
!7 = !{!2, !5 , i64 5}
!8 = !{!2, !5 , i64 9}
!9 = !{!2, !5 , i64 13}
!10 = !{!2, !5 , i64 17}
!11 = !{!2, !5 , i64 21}
!12 = !{!2, !5 , i64 25}
!13 = !{!2, !5 , i64 29}
!14 = !{!2, !5 , i64 33}
!15 = !{!2, !5 , i64 37}
!16 = !{!2, !5 , i64 41}
!17 = !{!2, !5 , i64 45}
!18 = !{!2, !5 , i64 49}
!19 = !{!2, !5 , i64 53}
!20 = !{!2, !5 , i64 57}
!21 = !{!2, !5 , i64 61}
!22 = !{!2, !5 , i64 65}
!23 = !{!2, !5 , i64 69}
!24 = !{!2, !5 , i64 73}
!25 = !{!2, !5 , i64 77}
!26 = !{!2, !5 , i64 81}
!27 = !{!2, !5 , i64 85}
!28 = !{!2, !5 , i64 89}
!29 = !{!2, !5 , i64 93}
!30 = !{!2, !5 , i64 97}
!31 = !{!2, !5 , i64 101}
!32 = !{!2, !5 , i64 105}
!33 = !{!2, !5 , i64 109}
!34 = !{!2, !5 , i64 113}
!35 = !{!2, !5 , i64 117}
!36 = !{!2, !5 , i64 121}
!37 = !{!2, !5 , i64 125}
!38 = !{i64 0, i64 1, !39 , i64 1, i64 4, !40 , i64 5, i64 4, !40 , i64 9, i64 4, !40 , i64 13, i64 4, !40 , i64 17, i64 4, !40 , i64 21, i64 4, !40 , i64 25, i64 4, !40 , i64 29, i64 4, !40 , i64 33, i64 4, !40 , i64 37, i64 4, !40 , i64 41, i64 4, !40 , i64 45, i64 4, !40 , i64 49, i64 4, !40 , i64 53, i64 4, !40 , i64 57, i64 4, !40 , i64 61, i64 4, !40 , i64 65, i64 4, !40 , i64 69, i64 4, !40 , i64 73, i64 4, !40 , i64 77, i64 4, !40 , i64 81, i64 4, !40 , i64 85, i64 4, !40 , i64 89, i64 4, !40 , i64 93, i64 4, !40 , i64 97, i64 4, !40 , i64 101, i64 4, !40 , i64 105, i64 4, !40 , i64 109, i64 4, !40 , i64 113, i64 4, !40 , i64 117, i64 4, !40 , i64 121, i64 4, !40 , i64 125, i64 4, !40}
!39 = !{!3, !3 , i64 0}
!40 = !{!5, !5 , i64 0}
```
Reviewers: asl
Subscribers: qcolombet
Differential Revision: http://reviews.llvm.org/D17441
llvm-svn: 261746