brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · 4f1735a Raw
146 lines · plain
1; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \2; RUN:   -mattr=-altivec -filetype=obj -xcoff-traceback-table=false -o %t.o < %s3 4; RUN: llvm-readobj --syms %t.o | FileCheck -D#NFA=2 --check-prefix=32-SYM %s5 6; RUN: llvm-readobj --relocs --expand-relocs %t.o | FileCheck -D#NFA=2 \7; RUN:   --check-prefix=32-REL %s8 9; RUN: llvm-objdump -D %t.o | FileCheck -D#NFA=2 --check-prefix=32-DIS %s10 11; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff \12; RUN:   -mcpu=pwr4 -mattr=-altivec < %s | FileCheck %s13 14;; FIXME: currently only fileHeader and sectionHeaders are supported in XCOFF64.15 16; Test verifies:17; If there exists a user-defined function whose name is the same as the18; "memcpy" ExternalSymbol's, we pick up the user-defined version, even if this19; may lead to some undefined behavior.20 21define dso_local signext i32 @memcpy(ptr %destination, i32 signext %num) {22entry:23  ret i32 324}25 26define void @call_memcpy(ptr %p, ptr %q, i32 %n) {27entry:28  call void @llvm.memcpy.p0.p0.i32(ptr %p, ptr %q, i32 %n, i1 false)29  ret void30}31 32declare void @llvm.memcpy.p0.p0.i32(ptr nocapture writeonly, ptr nocapture readonly, i32, i1)33 34; This test check35; 1. The symbol table for .o file to verify .memcpy is a defined external label.36; 2. There is no relocation associated with the call, since callee is defined.37; 3. Branch instruction in raw data is branching back to the right callee location.38 39; CHECK-NOT: .extern .memcpy40 41; 32-SYM:      Symbol {{[{][[:space:]] *}}Index: [[#Index:]]{{[[:space:]] *}}Name: .___memmove42; 32-SYM-NEXT:    Value (RelocatableAddress): 0x043; 32-SYM-NEXT:    Section: N_UNDEF44; 32-SYM-NEXT:    Type: 0x045; 32-SYM-NEXT:    StorageClass: C_EXT (0x2)46; 32-SYM-NEXT:    NumberOfAuxEntries: 147; 32-SYM-NEXT:    CSECT Auxiliary Entry {48; 32-SYM-NEXT:      Index: [[#NFA+2]]49; 32-SYM-NEXT:      SectionLen: 050; 32-SYM-NEXT:      ParameterHashIndex: 0x051; 32-SYM-NEXT:      TypeChkSectNum: 0x052; 32-SYM-NEXT:      SymbolAlignmentLog2: 053; 32-SYM-NEXT:      SymbolType: XTY_ER (0x0)54; 32-SYM-NEXT:      StorageMappingClass: XMC_PR (0x0)55; 32-SYM-NEXT:      StabInfoIndex: 0x056; 32-SYM-NEXT:      StabSectNum: 0x057; 32-SYM-NEXT:    }58; 32-SYM-NEXT:  }59 60; 32-SYM:      Symbol {{[{][[:space:]] *}}Index: [[#Index:]]{{[[:space:]] *}}Name: .memcpy 61; 32-SYM-NEXT:    Value (RelocatableAddress): 0x062; 32-SYM-NEXT:    Section: .text63; 32-SYM-NEXT:    Type: 0x064; 32-SYM-NEXT:    StorageClass: C_EXT (0x2)65; 32-SYM-NEXT:    NumberOfAuxEntries: 166; 32-SYM-NEXT:    CSECT Auxiliary Entry {67; 32-SYM-NEXT:      Index: [[#NFA+6]]68; 32-SYM-NEXT:      ContainingCsectSymbolIndex: [[#NFA+3]]69; 32-SYM-NEXT:      ParameterHashIndex: 0x070; 32-SYM-NEXT:      TypeChkSectNum: 0x071; 32-SYM-NEXT:      SymbolAlignmentLog2: 072; 32-SYM-NEXT:      SymbolType: XTY_LD (0x2)73; 32-SYM-NEXT:      StorageMappingClass: XMC_PR (0x0)74; 32-SYM-NEXT:      StabInfoIndex: 0x075; 32-SYM-NEXT:      StabSectNum: 0x076; 32-SYM-NEXT:    }77; 32-SYM-NEXT:  }78 79; 32-SYM-NOT: .memcpy80 81; 32-REL:      Relocations [82; 32-REL-NEXT:  Section (index: 1) .text {83; 32-REL-NEXT:  Relocation {84; 32-REL-NEXT:    Virtual Address: 0x1C85; 32-REL-NEXT:    Symbol: .___memmove ([[#NFA+1]])86; 32-REL-NEXT:    IsSigned: Yes87; 32-REL-NEXT:    FixupBitValue: 088; 32-REL-NEXT:    Length: 2689; 32-REL-NEXT:    Type: R_RBR (0x1A)90; 32-REL-NEXT:  }91; 32-REL-NEXT:}92; 32-REL-NEXT:  Section (index: 2) .data {93; 32-REL-NEXT:  Relocation {94; 32-REL-NEXT:    Virtual Address: 0x3495; 32-REL-NEXT:    Symbol: .memcpy ([[#NFA+5]])96; 32-REL-NEXT:    IsSigned: No97; 32-REL-NEXT:    FixupBitValue: 098; 32-REL-NEXT:    Length: 3299; 32-REL-NEXT:    Type: R_POS (0x0)100; 32-REL-NEXT:  }101; 32-REL-NEXT:  Relocation {102; 32-REL-NEXT:    Virtual Address: 0x38103; 32-REL-NEXT:    Symbol: TOC ([[#NFA+13]])104; 32-REL-NEXT:    IsSigned: No105; 32-REL-NEXT:    FixupBitValue: 0106; 32-REL-NEXT:    Length: 32107; 32-REL-NEXT:    Type: R_POS (0x0)108; 32-REL-NEXT:  }109; 32-REL-NEXT:  Relocation {110; 32-REL-NEXT:    Virtual Address: 0x40111; 32-REL-NEXT:    Symbol: .call_memcpy ([[#NFA+7]])112; 32-REL-NEXT:    IsSigned: No113; 32-REL-NEXT:    FixupBitValue: 0114; 32-REL-NEXT:    Length: 32115; 32-REL-NEXT:    Type: R_POS (0x0)116; 32-REL-NEXT:  }117; 32-REL-NEXT:  Relocation {118; 32-REL-NEXT:    Virtual Address: 0x44119; 32-REL-NEXT:    Symbol: TOC ([[#NFA+13]])120; 32-REL-NEXT:    IsSigned: No121; 32-REL-NEXT:    FixupBitValue: 0122; 32-REL-NEXT:    Length: 32123; 32-REL-NEXT:    Type: R_POS (0x0)124; 32-REL-NEXT:  }125; 32-REL-NEXT:  }126; 32-REL-NEXT: ]127 128; 32-REL-NOT:  Type: R_RBR (0x1A)129 130; 32-DIS:      Disassembly of section .text:131; 32-DIS:      00000000 <.memcpy>:132; 32-DIS-NEXT:        0: 38 60 00 03                   li 3, 3133; 32-DIS-NEXT:        4: 4e 80 00 20                   blr134; 32-DIS-NEXT:        8: 60 00 00 00                   nop135; 32-DIS-NEXT:        c: 60 00 00 00                   nop136; 32-DIS:      00000010 <.call_memcpy>:137; 32-DIS-NEXT:       10: 7c 08 02 a6                   mflr 0138; 32-DIS-NEXT:       14: 94 21 ff c0                   stwu 1, -64(1)139; 32-DIS-NEXT:       18: 90 01 00 48                   stw 0, 72(1)140; 32-DIS-NEXT:       1c: 4b ff ff e5                   bl 0x0141; 32-DIS-NEXT:       20: 60 00 00 00                   nop142; 32-DIS-NEXT:       24: 38 21 00 40                   addi 1, 1, 64143; 32-DIS-NEXT:       28: 80 01 00 08                   lwz 0, 8(1)144; 32-DIS-NEXT:       2c: 7c 08 03 a6                   mtlr 0145; 32-DIS-NEXT:       30: 4e 80 00 20                   blr146