98 lines · plain
1/// Check that file attributes are recorded in a .hexagon.attributes section.2 3q0&=vcmp.gt(v0.bf,v0.bf) // hvxv73, hvx-qfloat4r3:2=cround(r1:0,#0x0) // v67, audio5v3:0.w=vrmpyz(v0.b,r0.b) // hvxv73, zreg6v1:0.sf=vadd(v0.bf,v0.bf) // hvxv73, hvx-ieee-fp7 8// Note that the CPU version should be set with `--mcpu` and not with attributes9// because attributes are additive.10// RUN: llvm-mc -triple=hexagon --mcpu=hexagonv67 \11// RUN: --mattr=+hvxv73,+hvx-qfloat,+hvx-ieee-fp,+zreg,+audio %s \12// RUN: -filetype=obj --hexagon-add-build-attributes -o %t.o13 14// RUN: llvm-readelf -A %t.o | \15// RUN: FileCheck %s --match-full-lines --implicit-check-not={{.}} --check-prefix=READELF16 17/// llvm-objudmp should be able to determine subtarget features18/// without manually passing in features when an attribute section is present.19// RUN: llvm-objdump -d %t.o | FileCheck %s --check-prefix=OBJDUMP20 21// RUN: llvm-mc -triple=hexagon --mcpu=hexagonv67 \22// RUN: --mattr=+hvxv73,+hvx-qfloat,+hvx-ieee-fp,+zreg,+audio %s \23// RUN: -filetype=asm --hexagon-add-build-attributes | \24// RUN: FileCheck %s --match-full-lines --implicit-check-not={{.}} --check-prefix=ASM25 26// READELF: BuildAttributes {27// READELF-NEXT: FormatVersion: 0x4128// READELF-NEXT: Section 1 {29// READELF-NEXT: SectionLength: 3130// READELF-NEXT: Vendor: hexagon31// READELF-NEXT: Tag: Tag_File (0x1)32// READELF-NEXT: Size: 1933// READELF-NEXT: FileAttributes {34// READELF-NEXT: Attribute {35// READELF-NEXT: Tag: 436// READELF-NEXT: TagName: arch37// READELF-NEXT: Value: 6738// READELF-NEXT: }39// READELF-NEXT: Attribute {40// READELF-NEXT: Tag: 541// READELF-NEXT: TagName: hvx_arch42// READELF-NEXT: Value: 7343// READELF-NEXT: }44// READELF-NEXT: Attribute {45// READELF-NEXT: Tag: 646// READELF-NEXT: TagName: hvx_ieeefp47// READELF-NEXT: Value: 148// READELF-NEXT: }49// READELF-NEXT: Attribute {50// READELF-NEXT: Tag: 751// READELF-NEXT: TagName: hvx_qfloat52// READELF-NEXT: Value: 153// READELF-NEXT: }54// READELF-NEXT: Attribute {55// READELF-NEXT: Tag: 856// READELF-NEXT: TagName: zreg57// READELF-NEXT: Value: 158// READELF-NEXT: }59// READELF-NEXT: Attribute {60// READELF-NEXT: Tag: 961// READELF-NEXT: TagName: audio62// READELF-NEXT: Value: 163// READELF-NEXT: }64// READELF-NEXT: Attribute {65// READELF-NEXT: Tag: 1066// READELF-NEXT: TagName: cabac67// READELF-NEXT: Value: 168// READELF-NEXT: }69// READELF-NEXT: }70// READELF-NEXT: }71// READELF-NEXT: }72 73// OBJDUMP: 1c80e0d0 { q0 &= vcmp.gt(v0.bf,v0.bf) }74// OBJDUMP-NEXT: 8ce0c042 { r3:2 = cround(r1:0,#0x0) }75// OBJDUMP-NEXT: 19e8c000 { v3:0.w = vrmpyz(v0.b,r0.b) }76// OBJDUMP-NEXT: 1d40e0c0 { v1:0.sf = vadd(v0.bf,v0.bf) }77 78// ASM: .attribute 4, 67 // Tag_arch79// ASM-NEXT: .attribute 5, 73 // Tag_hvx_arch80// ASM-NEXT: .attribute 6, 1 // Tag_hvx_ieeefp81// ASM-NEXT: .attribute 7, 1 // Tag_hvx_qfloat82// ASM-NEXT: .attribute 8, 1 // Tag_zreg83// ASM-NEXT: .attribute 9, 1 // Tag_audio84// ASM-NEXT: .attribute 10, 1 // Tag_cabac85// ASM-EMPTY:86// ASM-NEXT: {87// ASM-NEXT: q0 &= vcmp.gt(v0.bf,v0.bf)88// ASM-NEXT: }89// ASM-NEXT: {90// ASM-NEXT: r3:2 = cround(r1:0,#0)91// ASM-NEXT: }92// ASM-NEXT: {93// ASM-NEXT: v3:0.w = vrmpyz(v0.b,r0.b)94// ASM-NEXT: }95// ASM-NEXT: {96// ASM-NEXT: v1:0.sf = vadd(v0.bf,v0.bf)97// ASM-NEXT: }98