brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.9 KiB · 02b0a9b Raw
198 lines · plain
1; RUN: rm -rf %t && split-file %s %t2 3; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \4; RUN:     -xcoff-traceback-table=false < %t/no-ref.ll | FileCheck %s --check-prefixes=NOREF5; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \6; RUN:     -xcoff-traceback-table=false --filetype=obj < %t/no-ref.ll -o %t/no-ref.o7; RUN: llvm-objdump %t/no-ref.o -r | FileCheck %s --check-prefix=NOREF-OBJ8 9; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \10; RUN:     -xcoff-traceback-table=false < %t/no-vnds.ll | FileCheck %s --check-prefixes=NOVNDS11; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \12; RUN:     -xcoff-traceback-table=false --filetype=obj < %t/no-vnds.ll -o %t/no-vnds.o13; RUN: llvm-objdump %t/no-vnds.o -r | FileCheck %s --check-prefix=NOVNDS-OBJ14 15; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \16; RUN:     -xcoff-traceback-table=false < %t/with-vnds.ll | FileCheck %s --check-prefixes=WITHVNDS17; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \18; RUN:     -xcoff-traceback-table=false --filetype=obj < %t/with-vnds.ll -o %t/with-vnds.o19; RUN: llvm-objdump %t/with-vnds.o -tr | FileCheck %s --check-prefix=WITHVNDS-OBJ20 21; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \22; RUN:     -xcoff-traceback-table=false < %t/zero-size-cnts-section.ll | FileCheck %s --check-prefixes=ZERO-SIZE-CNTS23; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \24; RUN:     -xcoff-traceback-table=false --filetype=obj < %t/zero-size-cnts-section.ll -o %t/zero-size-cnts-section.o25; RUN: llvm-objdump %t/zero-size-cnts-section.o -tr | FileCheck %s --check-prefix=ZERO-SIZE-CNTS-OBJ26 27; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \28; RUN:     -xcoff-traceback-table=false < %t/zero-size-other-section.ll | FileCheck %s --check-prefixes=ZERO-SIZE-OTHER29; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \30; RUN:     -xcoff-traceback-table=false < %t/zero-size-other-section.ll | FileCheck %s --check-prefixes=ZERO-SIZE-OTHER31; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc-ibm-aix-xcoff \32; RUN:     -xcoff-traceback-table=false --filetype=obj < %t/zero-size-other-section.ll -o %t/zero-size-other-section.o33; RUN: llvm-objdump %t/zero-size-other-section.o -tr | FileCheck %s --check-prefix=ZERO-SIZE-OTHER-OBJ34; RUN: llc -verify-machineinstrs -mcpu=pwr4 -mattr=-altivec -mtriple powerpc64-ibm-aix-xcoff \35; RUN:     -xcoff-traceback-table=false --filetype=obj < %t/zero-size-other-section.ll -o %t/zero-size-other-section.o36; RUN: llvm-objdump %t/zero-size-other-section.o -tr | FileCheck %s --check-prefix=ZERO-SIZE-OTHER-OBJ37 38 39;--- no-ref.ll40; The absence of a __llvm_prf_cnts section should stop generating the .refs.41;42target datalayout = "E-m:a-p:32:32-i64:64-n32"43target triple = "powerpc-ibm-aix7.2.0.0"44 45@__profd_main = private global i64 zeroinitializer, section "__llvm_prf_data", align 846@__llvm_prf_nm = private constant [6 x i8] c"\04\00main", section "__llvm_prf_names", align 147 48@llvm.used = appending global [2 x ptr]49  [ptr @__profd_main,50   ptr @__llvm_prf_nm], section "llvm.metadata"51 52define i32 @main() #0 {53entry:54  ret i32 155}56 57; NOREF-NOT:  .ref __llvm_prf_data58; NOREF-NOT:  .ref __llvm_prf_names59; NOREF-NOT:  .ref __llvm_prf_vnds60 61; NOREF-OBJ-NOT: R_REF  __llvm_prf_data62; NOREF-OBJ-NOT: R_REF  __llvm_prf_names63; NOREF-OBJ-NOT: R_REF  __llvm_prf_vnds64 65;--- no-vnds.ll66; This is the most common case. When -fprofile-generate is used and there exists executable code, we generate the __llvm_prf_cnts, __llvm_prf_data, and __llvm_prf_names sections.67;68target datalayout = "E-m:a-p:32:32-i64:64-n32"69target triple = "powerpc-ibm-aix7.2.0.0"70 71@__profc_main = private global [1 x i64] zeroinitializer, section "__llvm_prf_cnts", align 872@__profd_main = private global i64 zeroinitializer, section "__llvm_prf_data", align 873@__llvm_prf_nm = private constant [6 x i8] c"\04\00main", section "__llvm_prf_names", align 174 75@llvm.used = appending global [3 x ptr]76  [ptr @__profc_main,77   ptr @__profd_main,78   ptr @__llvm_prf_nm], section "llvm.metadata"79 80define i32 @main() #0 {81entry:82  ret i32 183}84; There will be two __llvm_prf_cnts .csects, one to represent the actual csect 85; that holds @__profc_main, and one generated to hold the .ref directives. In 86; XCOFF, a csect can be defined in pieces, so this is is legal assembly.87;88; NOVNDS:      .csect __llvm_prf_cnts[RW],389; NOVNDS:      .csect __llvm_prf_cnts[RW],390; NOVNDS-NEXT: .ref __llvm_prf_data[RW]91; NOVNDS-NEXT: .ref __llvm_prf_names[RO]92; NOVNDS-NOT:  .ref __llvm_prf_vnds93 94; NOVNDS-OBJ: 00000000 R_REF  __llvm_prf_data95; NOVNDS-OBJ: 00000000 R_REF  __llvm_prf_names96; NOVNDS-OBJ-NOT: R_REF  __llvm_prf_vnds97 98;--- with-vnds.ll99; When value profiling is needed, the PGO instrumentation generates variables in the __llvm_prf_vnds section, so we generate a .ref for them too.100;101@__profc_main = private global [1 x i64] zeroinitializer, section "__llvm_prf_cnts", align 8102@__profd_main = private global i64 zeroinitializer, section "__llvm_prf_data", align 8103@__llvm_prf_nm = private constant [6 x i8] c"\04\00main", section "__llvm_prf_names", align 1104@__llvm_prf_vnodes = private global [10 x { i64, i64, ptr }] zeroinitializer, section "__llvm_prf_vnds"105 106@llvm.used = appending global [4 x ptr]107  [ptr @__profc_main,108   ptr @__profd_main,109   ptr @__llvm_prf_nm,110   ptr @__llvm_prf_vnodes], section "llvm.metadata"111 112define i32 @main() #0 {113entry:114  ret i32 1115}116 117; WITHVNDS:      .csect __llvm_prf_cnts[RW],3118; WITHVNDS:      .csect __llvm_prf_cnts[RW],3119; WITHVNDS-NEXT: .ref __llvm_prf_data[RW]120; WITHVNDS-NEXT: .ref __llvm_prf_names[RO]121; WITHVNDS-NEXT: .ref __llvm_prf_vnds[RW]122 123; WITHVNDS-OBJ:      SYMBOL TABLE:124; WITHVNDS-OBJ-NEXT: 00000000      df *DEBUG*	00000000 .file125; WITHVNDS-OBJ-NEXT: 00000000 l       .text	00000008 126; WITHVNDS-OBJ-NEXT: 00000000 g     F .text (csect: ) 	00000000 .main127; WITHVNDS-OBJ-NEXT: 00000008 l       .text	00000006 __llvm_prf_names128; WITHVNDS-OBJ-NEXT: 00000010 l     O .data	00000008 __llvm_prf_cnts129; WITHVNDS-OBJ-NEXT: 00000018 l     O .data	00000008 __llvm_prf_data130; WITHVNDS-OBJ-NEXT: 00000020 l     O .data	000000f0 __llvm_prf_vnds131; WITHVNDS-OBJ-NEXT: 00000110 g     O .data	0000000c main132; WITHVNDS-OBJ-NEXT: 0000011c l       .data	00000000 TOC133 134; WITHVNDS-OBJ:      RELOCATION RECORDS FOR [.data]:135; WITHVNDS-OBJ-NEXT: OFFSET   TYPE                     VALUE136; WITHVNDS-OBJ-NEXT: 00000000 R_REF                    __llvm_prf_data137; WITHVNDS-OBJ-NEXT: 00000000 R_REF                    __llvm_prf_names138; WITHVNDS-OBJ-NEXT: 00000000 R_REF                    __llvm_prf_vnds139; WITHVNDS-OBJ-NEXT: 00000100 R_POS                    .main140; WITHVNDS-OBJ-NEXT: 00000104 R_POS                    TOC141 142;--- zero-size-cnts-section.ll143; If __llvm_prf_cnts is of zero size, do not generate the .ref directive.144; The size of the other sections does not matter.145 146@dummy_cnts = private global [0 x i32] zeroinitializer, section "__llvm_prf_cnts", align 4147@dummy_data = private global [1 x i64] zeroinitializer, section "__llvm_prf_data", align 8148@dummy_name = private constant [0 x i32] zeroinitializer, section "__llvm_prf_names", align 4149 150@llvm.used = appending global [3 x ptr]151  [ptr @dummy_cnts,152   ptr @dummy_data,153   ptr @dummy_name], section "llvm.metadata"154 155define i32 @main() #0 {156entry:157  ret i32 1158}159 160; ZERO-SIZE-CNTS-NOT: .ref __llvm_prf_data[RW]161; ZERO-SIZE-CNTS-NOT: .ref __llvm_prf_names[RO]162; ZERO-SIZE-CNTS-NOT: .ref __llvm_prf_vnds163 164; ZERO-SIZE-CNTS-OBJ-NOT: R_REF  __llvm_prf_data165; ZERO-SIZE-CNTS-OBJ-NOT: R_REF  __llvm_prf_names166; ZERO-SIZE-CNTS-OBJ-NOT: R_REF  __llvm_prf_vnds167 168;--- zero-size-other-section.ll169; If __llvm_prf_cnts is of non-zero size, generate the .ref directive even if other sections170; are zero-sized;171 172@__profc_main = private global [1 x i64] zeroinitializer, section "__llvm_prf_cnts", align 8173@__profd_main = private global [0 x i64] zeroinitializer, section "__llvm_prf_data", align 8174@__llvm_prf_nm = private constant [0 x i8] zeroinitializer, section "__llvm_prf_names", align 1175@__llvm_prf_vnodes = private global [0 x { i64, i64, ptr }] zeroinitializer, section "__llvm_prf_vnds"176 177@llvm.used = appending global [4 x ptr]178  [ptr @__profc_main,179   ptr @__profd_main,180   ptr @__llvm_prf_nm,181   ptr @__llvm_prf_vnodes], section "llvm.metadata"182 183define i32 @main() #0 {184entry:185  ret i32 1186}187 188; ZERO-SIZE-OTHER:      .csect __llvm_prf_cnts[RW],3189; ZERO-SIZE-OTHER:      .csect __llvm_prf_cnts[RW],3190; ZERO-SIZE-OTHER-NEXT: .ref __llvm_prf_data[RW]191; ZERO-SIZE-OTHER-NEXT: .ref __llvm_prf_names[RO]192; ZERO-SIZE-OTHER-NEXT: .ref __llvm_prf_vnds[RW]193 194; ZERO-SIZE-OTHER-OBJ:      R_REF __llvm_prf_data195; ZERO-SIZE-OTHER-OBJ-NEXT: R_REF __llvm_prf_names196; ZERO-SIZE-OTHER-OBJ-NEXT: R_REF __llvm_prf_vnds197 198