259 lines · c
1// -----------------------------------------------------------------------------2// Tests for the hvx features and warnings.3// -----------------------------------------------------------------------------4 5// No HVX without -mhvx/-mhvx=6 7// CHECK-HVX-ON: "-target-feature" "+hvx8// CHECK-HVX-ON-NOT: "-target-feature" "-hvx9// CHECK-HVX-OFF-NOT: "-target-feature" "+hvx10 11// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv5 \12// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s13// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv55 \14// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s15// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv60 \16// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s17// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv62 \18// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s19// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv65 \20// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s21// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv66 \22// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s23// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv67 \24// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s25// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv67t \26// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s27// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv68 \28// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s29// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 \30// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s31// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv71 \32// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s33// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv71t \34// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s35// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv73 \36// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s37 38// Infer HVX version from flag:39 40// CHECK-HVX-V60: "-target-feature" "+hvxv60"41// CHECK-HVX-V62: "-target-feature" "+hvxv62"42// CHECK-HVX-V65: "-target-feature" "+hvxv65"43// CHECK-HVX-V66: "-target-feature" "+hvxv66"44// CHECK-HVX-V67: "-target-feature" "+hvxv67"45// CHECK-HVX-V68: "-target-feature" "+hvxv68"46// CHECK-HVX-V69: "-target-feature" "+hvxv69"47// CHECK-HVX-V71: "-target-feature" "+hvxv71"48// CHECK-HVX-V73: "-target-feature" "+hvxv73"49 50// Direct version flag:51// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v60 \52// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V60 %s53// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v62 \54// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V62 %s55// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v65 \56// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V65 %s57// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v66 \58// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V66 %s59// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v67 \60// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V67 %s61// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v68 \62// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V68 %s63// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v69 \64// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V69 %s65// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v71 \66// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V71 %s67// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v73 \68// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V73 %s69// Infer HVX version from CPU version:70// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv60 -mhvx \71// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V60 %s72// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv62 -mhvx \73// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V62 %s74// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv65 -mhvx \75// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V65 %s76// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv66 -mhvx \77// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V66 %s78// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv67 -mhvx \79// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V67 %s80// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv67t -mhvx \81// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V67 %s82// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv68 -mhvx \83// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V68 %s84// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx \85// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V69 %s86// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv71 -mhvx \87// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V71 %s88// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv73 -mhvx \89// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V73 %s90 91// Direct version flag with different CPU version:92// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v60 -mv62 \93// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V60 %s94// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v62 -mv65 \95// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V62 %s96// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v65 -mv66 \97// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V65 %s98// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v66 -mv67 \99// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V66 %s100// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v67 -mv68 \101// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V67 %s102// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v68 -mv69 \103// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V68 %s104// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v69 -mv71 \105// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V69 %s106// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v71 -mv73 \107// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V71 %s108// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v73 -mv60 \109// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V73 %s110 111// Direct version flag with different CPU version and versionless -mhvx:112// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v60 -mv62 -mhvx \113// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V62 %s114// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v62 -mv65 -mhvx \115// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V65 %s116// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v65 -mv66 -mhvx \117// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V66 %s118// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v66 -mv67 -mhvx \119// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V67 %s120// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v67 -mv68 -mhvx \121// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V68 %s122// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v68 -mv69 -mhvx \123// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V69 %s124// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v69 -mv71 -mhvx \125// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V71 %s126// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v71 -mv73 -mhvx \127// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V73 %s128// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v73 -mv60 -mhvx \129// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V60 %s130 131// Direct version flag with different CPU version, versionless -mhvx132// and -mno-hvx. The -mno-hvx cancels -mhvx=, versionless -mhvx wins:133// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v60 -mno-hvx -mv62 -mhvx \134// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V62 %s135// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v62 -mno-hvx -mv65 -mhvx \136// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V65 %s137// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v65 -mno-hvx -mv66 -mhvx \138// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V66 %s139// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v66 -mno-hvx -mv67 -mhvx \140// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V67 %s141// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v67 -mno-hvx -mv68 -mhvx \142// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V68 %s143// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v68 -mno-hvx -mv69 -mhvx \144// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V69 %s145// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v69 -mno-hvx -mv71 -mhvx \146// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V71 %s147// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v71 -mno-hvx -mv73 -mhvx \148// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V73 %s149// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v73 -mno-hvx -mv60 -mhvx \150// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V60 %s151 152// Direct version flag with different CPU version, versionless -mhvx153// and -mno-hvx. The -mno-hvx cancels versionless -mhvx, -mhvx= wins:154// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv62 -mhvx -mno-hvx -mhvx=v60 \155// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V60 %s156// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv65 -mhvx -mno-hvx -mhvx=v62 \157// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V62 %s158// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv66 -mhvx -mno-hvx -mhvx=v65 \159// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V65 %s160// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv67 -mhvx -mno-hvx -mhvx=v66 \161// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V66 %s162// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv68 -mhvx -mno-hvx -mhvx=v67 \163// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V67 %s164// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx -mno-hvx -mhvx=v68 \165// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V68 %s166// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv71 -mhvx -mno-hvx -mhvx=v69 \167// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V69 %s168// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv73 -mhvx -mno-hvx -mhvx=v71 \169// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V71 %s170// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv60 -mhvx -mno-hvx -mhvx=v73 \171// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-V73 %s172 173// Infer HVX length from flag:174 175// CHECK-HVX-L64: "-target-feature" "+hvx-length64b"176// CHECK-HVX-L64-NOT: "-target-feature" "+hvx-length128b"177// CHECK-HVX-L128: "-target-feature" "+hvx-length128b"178// CHECK-HVX-L128-NOT: "-target-feature" "+hvx-length64b"179 180// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx -mhvx-length=64b \181// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-L64 %s182// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx -mhvx-length=128b \183// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-L128 %s184 185// Infer HVX length from HVX version:186 187// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v60 \188// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-L64 %s189// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v62 \190// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-L64 %s191// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v65 \192// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-L64 %s193// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v66 \194// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-L128 %s195// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v67 \196// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-L128 %s197// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v68 \198// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-L128 %s199// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v69 \200// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-L128 %s201 202// No HVX with trailing -mno-hvx203 204// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v69 -mno-hvx \205// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s206// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx -mno-hvx \207// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s208// RUN: not %clang -c %s -### --target=hexagon-unknown-elf -mhvx=v69 -mhvx-length=128b -mno-hvx \209// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s210// RUN: not %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx -mhvx-qfloat -mno-hvx \211// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-OFF %s212 213// Float214 215// CHECK-HVX-QFLOAT-ON: "-target-feature" "+hvx-qfloat"216// CHECK-HVX-QFLOAT-OFF-NOT: "-target-feature" "+hvx-qfloat"217// CHECK-HVX-IEEE-ON: "-target-feature" "+hvx-ieee-fp"218// CHECK-HVX-IEEE-OFF-NOT: "-target-feature" "+hvx-ieee-fp"219 220// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx -mhvx-qfloat \221// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-QFLOAT-ON %s222// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx -mno-hvx-qfloat \223// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-QFLOAT-OFF %s224// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx -mno-hvx-qfloat -mhvx-qfloat \225// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-QFLOAT-ON %s226// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx -mhvx-qfloat -mno-hvx-qfloat \227// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-QFLOAT-OFF %s228 229// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx -mhvx-ieee-fp \230// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-IEEE-ON %s231// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx -mno-hvx-ieee-fp \232// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-IEEE-OFF %s233// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx -mno-hvx-ieee-fp -mhvx-ieee-fp \234// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-IEEE-ON %s235// RUN: %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx -mhvx-ieee-fp -mno-hvx-ieee-fp \236// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-IEEE-OFF %s237 238// HVX flags heed HVX:239 240// CHECK-NEEDS-HVX: error: {{.*}} requires HVX, use -mhvx/-mhvx= to enable it241 242// RUN: not %clang -c %s -### --target=hexagon-unknown-elf -mv66 -mhvx-length=64b \243// RUN: 2>&1 | FileCheck -check-prefix=CHECK-NEEDS-HVX %s244// RUN: not %clang -c %s -### --target=hexagon-unknown-elf -mv66 -mhvx-length=128b \245// RUN: 2>&1 | FileCheck -check-prefix=CHECK-NEEDS-HVX %s246// RUN: not %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx-qfloat \247// RUN: 2>&1 | FileCheck -check-prefix=CHECK-NEEDS-HVX %s248// RUN: not %clang -c %s -### --target=hexagon-unknown-elf -mv69 -mhvx-ieee-fp \249// RUN: 2>&1 | FileCheck -check-prefix=CHECK-NEEDS-HVX %s250 251// Invalid HVX length:252 253// CHECK-HVX-BAD-LENGTH: error: unsupported argument '{{.*}}' to option '-mhvx-length='254 255// RUN: not %clang -c %s -### --target=hexagon-unknown-elf -mhvx -mhvx-length=B \256// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-BAD-LENGTH %s257// RUN: not %clang -c %s -### --target=hexagon-unknown-elf -mhvx -mhvx-length=128 \258// RUN: 2>&1 | FileCheck -check-prefix=CHECK-HVX-BAD-LENGTH %s259