Skip to content
This repository has been archived by the owner on Sep 2, 2018. It is now read-only.

Implement AVRMCCodeEmitter::getExprOpValue() #18

Closed
4ntoine opened this issue Dec 24, 2014 · 6 comments
Closed

Implement AVRMCCodeEmitter::getExprOpValue() #18

4ntoine opened this issue Dec 24, 2014 · 6 comments

Comments

@4ntoine
Copy link

4ntoine commented Dec 24, 2014

Assertion failed: (Kind == MCExpr::SymbolRef), function getExprOpValue, file /Users/asmirnov/Documents/dev/src/llvm_dylan/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp, line 180.
0  clang                    0x0000000102d31b1e llvm::sys::PrintStackTrace(__sFILE*) + 46
1  clang                    0x0000000102d32ecb PrintStackTraceSignalHandler(void*) + 27
2  clang                    0x0000000102d33315 SignalHandler(int) + 565
3  libsystem_platform.dylib 0x00007fff903a15aa _sigtramp + 26
4  clang                    0x0000000101fec81e llvm::MachineOperand::CreateReg(unsigned int, bool, bool, bool, bool, bool, bool, unsigned int, bool, bool) + 702
5  clang                    0x0000000102d32efb raise + 27
6  clang                    0x0000000102d32fb2 abort + 18
7  clang                    0x0000000102d32f91 __assert_rtn + 129
8  clang                    0x0000000101ff587c llvm::AVRMCCodeEmitter::getExprOpValue(llvm::MCExpr const*, llvm::SmallVectorImpl<llvm::MCFixup>&, llvm::MCSubtargetInfo const&) const + 140
9  clang                    0x0000000101ff5a14 llvm::AVRMCCodeEmitter::getMachineOpValue(llvm::MCInst const&, llvm::MCOperand const&, llvm::SmallVectorImpl<llvm::MCFixup>&, llvm::MCSubtargetInfo const&) const + 388
10 clang                    0x0000000101ff47b3 llvm::AVRMCCodeEmitter::getBinaryCodeForInstr(llvm::MCInst const&, llvm::SmallVectorImpl<llvm::MCFixup>&, llvm::MCSubtargetInfo const&) const + 739
11 clang                    0x0000000101ff4443 llvm::AVRMCCodeEmitter::EncodeInstruction(llvm::MCInst const&, llvm::raw_ostream&, llvm::SmallVectorImpl<llvm::MCFixup>&, llvm::MCSubtargetInfo const&) const + 67
12 clang                    0x0000000102a40159 llvm::MCELFStreamer::EmitInstToData(llvm::MCInst const&, llvm::MCSubtargetInfo const&) + 217
13 clang                    0x0000000102a53635 llvm::MCObjectStreamer::EmitInstruction(llvm::MCInst const&, llvm::MCSubtargetInfo const&) + 277
14 clang                    0x0000000101fbc8ce (anonymous namespace)::AVRAsmPrinter::EmitInstruction(llvm::MachineInstr const*) + 206
15 clang                    0x000000010327d513 llvm::AsmPrinter::EmitFunctionBody() + 1235
16 clang                    0x0000000101fbd141 llvm::AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) + 65
17 clang                    0x00000001023a599e llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 110
18 clang                    0x000000010276b9fb llvm::FPPassManager::runOnFunction(llvm::Function&) + 427
19 clang                    0x000000010276bd08 llvm::FPPassManager::runOnModule(llvm::Module&) + 104
20 clang                    0x000000010276c714 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) + 1412
21 clang                    0x000000010276bfbe llvm::legacy::PassManagerImpl::run(llvm::Module&) + 302
22 clang                    0x000000010276ce91 llvm::legacy::PassManager::run(llvm::Module&) + 33
23 clang                    0x00000001035e2b21 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, llvm::raw_ostream*) + 1601
24 clang                    0x00000001035e22d2 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::raw_ostream*) + 114
25 clang                    0x00000001037f8595 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 1397
26 clang                    0x0000000104304bd4 clang::ParseAST(clang::Sema&, bool, bool) + 1268
27 clang                    0x000000010320381a clang::ASTFrontendAction::ExecuteAction() + 522
28 clang                    0x00000001037f6653 clang::CodeGenAction::ExecuteAction() + 3939
29 clang                    0x0000000103202d98 clang::FrontendAction::Execute() + 120
30 clang                    0x0000000103194479 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 1017
31 clang                    0x0000000103274f21 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 3201
32 clang                    0x0000000101f9c870 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 2496
33 clang                    0x0000000101fb24cb ExecuteCC1Tool(llvm::ArrayRef<char const*>, llvm::StringRef) + 171
34 clang                    0x0000000101fb133a main + 1274
35 libdyld.dylib            0x00007fff8b4d95fd start + 1

1.  <eof> parser at end of file
2.  Code generation
3.  Running pass 'Function Pass Manager' on module '/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/main.cpp'.
4.  Running pass 'AVR Assembly Printer' on function '@main'
clang: error: unable to execute command: Illegal instruction: 4
@4ntoine
Copy link
Author

4ntoine commented Dec 24, 2014

ask me for the files to test (can't attach to the issue)

@4ntoine
Copy link
Author

4ntoine commented Dec 26, 2014

one more crash case:

Assertion failed: (Kind == MCExpr::SymbolRef), function getExprOpValue, file /Users/asmirnov/Documents/dev/src/llvm_dylan/lib/Target/AVR/MCTargetDesc/AVRMCCodeEmitter.cpp, line 180.
0  clang                    0x0000000110210b1e llvm::sys::PrintStackTrace(__sFILE*) + 46
1  clang                    0x0000000110211ecb PrintStackTraceSignalHandler(void*) + 27
2  clang                    0x0000000110212315 SignalHandler(int) + 565
3  libsystem_platform.dylib 0x00007fff903a15aa _sigtramp + 26
4  libsystem_platform.dylib 0x00007fed73c06b18 _sigtramp + 3817231752
5  clang                    0x0000000110211efb raise + 27
6  clang                    0x0000000110211fb2 abort + 18
7  clang                    0x0000000110211f91 __assert_rtn + 129
8  clang                    0x000000010f4d487c llvm::AVRMCCodeEmitter::getExprOpValue(llvm::MCExpr const*, llvm::SmallVectorImpl<llvm::MCFixup>&, llvm::MCSubtargetInfo const&) const + 140
9  clang                    0x000000010f4d4a14 llvm::AVRMCCodeEmitter::getMachineOpValue(llvm::MCInst const&, llvm::MCOperand const&, llvm::SmallVectorImpl<llvm::MCFixup>&, llvm::MCSubtargetInfo const&) const + 388
10 clang                    0x000000010f4d37b3 llvm::AVRMCCodeEmitter::getBinaryCodeForInstr(llvm::MCInst const&, llvm::SmallVectorImpl<llvm::MCFixup>&, llvm::MCSubtargetInfo const&) const + 739
11 clang                    0x000000010f4d3443 llvm::AVRMCCodeEmitter::EncodeInstruction(llvm::MCInst const&, llvm::raw_ostream&, llvm::SmallVectorImpl<llvm::MCFixup>&, llvm::MCSubtargetInfo const&) const + 67
12 clang                    0x000000010ff1f159 llvm::MCELFStreamer::EmitInstToData(llvm::MCInst const&, llvm::MCSubtargetInfo const&) + 217
13 clang                    0x000000010ff32635 llvm::MCObjectStreamer::EmitInstruction(llvm::MCInst const&, llvm::MCSubtargetInfo const&) + 277
14 clang                    0x000000010f49b8ce (anonymous namespace)::AVRAsmPrinter::EmitInstruction(llvm::MachineInstr const*) + 206
15 clang                    0x000000011075c513 llvm::AsmPrinter::EmitFunctionBody() + 1235
16 clang                    0x000000010f49c141 llvm::AsmPrinter::runOnMachineFunction(llvm::MachineFunction&) + 65
17 clang                    0x000000010f88499e llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 110
18 clang                    0x000000010fc4a9fb llvm::FPPassManager::runOnFunction(llvm::Function&) + 427
19 clang                    0x000000010fc4ad08 llvm::FPPassManager::runOnModule(llvm::Module&) + 104
20 clang                    0x000000010fc4b714 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) + 1412
21 clang                    0x000000010fc4afbe llvm::legacy::PassManagerImpl::run(llvm::Module&) + 302
22 clang                    0x000000010fc4be91 llvm::legacy::PassManager::run(llvm::Module&) + 33
23 clang                    0x0000000110ac1b21 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, llvm::raw_ostream*) + 1601
24 clang                    0x0000000110ac12d2 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::raw_ostream*) + 114
25 clang                    0x0000000110cd7595 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 1397
26 clang                    0x00000001117e3bd4 clang::ParseAST(clang::Sema&, bool, bool) + 1268
27 clang                    0x00000001106e281a clang::ASTFrontendAction::ExecuteAction() + 522
28 clang                    0x0000000110cd5653 clang::CodeGenAction::ExecuteAction() + 3939
29 clang                    0x00000001106e1d98 clang::FrontendAction::Execute() + 120
30 clang                    0x0000000110673479 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 1017
31 clang                    0x0000000110753f21 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 3201
32 clang                    0x000000010f47b870 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 2496
33 clang                    0x000000010f4914cb ExecuteCC1Tool(llvm::ArrayRef<char const*>, llvm::StringRef) + 171
34 clang                    0x000000010f49033a main + 1274
35 libdyld.dylib            0x00007fff8b4d95fd start + 1

@dylanmckay
Copy link
Member

I remember writing the getExprOpValue function (or rather, modifying it from the Mips backend) and thinking "this probably won't work" - I guess you've proven me right.

Email me the files and I'll investigate further.

@dylanmckay
Copy link
Member

It should be a very quick fix, however

@4ntoine
Copy link
Author

4ntoine commented Jan 10, 2015

i've emailed you the files on dec, 23.

command-line to reproduce:

./clang -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -I/Applications/A.app/Contents/Resources/Java/hardware/arduino/cores/arduino -I/Applications/A.app/Contents/Resources/Java/hardware/arduino/variants/standard -I/Applications/A.app/Contents/Resources/Java/hardware/tools/avr/avr/include --target=avr /Applications/A.app/Contents/Resources/Java/hardware/arduino/cores/arduino/main.cpp -o /tmp/a_test1/main.cpp.o

@dylanmckay dylanmckay changed the title Failed to emit bytecode Implement AVRMCCodeEmitter::getExprOpValue() Feb 17, 2015
@dylanmckay
Copy link
Member

Reproduction steps:

main.ll:

; ModuleID = '/usr/share/arduino/hardware/arduino/avr/cores/arduino/main.cpp'
target datalayout = "e-p:16:8-i16:8-i32:8-i64:8-f32:8-f64:8-n8"
target triple = "avr"

define weak i16 @atexit(void ()* %func) #0 {
entry:
  ret i16 0
}

define weak void @initVariant() #0 {
entry:
  ret void
}

; Function Attrs: noreturn
define i16 @main() #1 {
entry:
  tail call void @init()
  tail call void @initVariant()
  tail call void @setup()
  br label %for.cond

for.cond:                                         ; preds = %for.cond, %if.then, %entry
  tail call void @loop()
  br i1 icmp ne (void ()* @_Z14serialEventRunv, void ()* null), label %if.then, label %for.cond

if.then:                                          ; preds = %for.cond
  tail call void @_Z14serialEventRunv()
  br label %for.cond
}

declare void @init() #0

declare void @setup() #0

declare void @loop() #0

declare extern_weak void @_Z14serialEventRunv() #0

attributes #0 = { "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 = { noreturn "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" }

!llvm.ident = !{!0}

!0 = !{!"clang version 3.7.0 (https://github.com/llvm-mirror/clang.git a69a4576ade0bfa4644320b72a4cf425ea62e306) (https://github.com/llvm-mirror/llvm.git 78803d362fda1d72609290bcc44fc0eaf528ea3b)"}

Command line:
llc main.ll -o main.o -filetype=obj

Currently tested with 78803d3

dylanmckay pushed a commit that referenced this issue Mar 3, 2016
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@261746 91177308-0d34-0410-b5e6-96231b3b80d8
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants