llvm-project/llvm/test/CodeGen/Hexagon/isel-select-v4i8.ll
Fangrui Song 2208c97c1b [Hexagon,test] Change llc -march= to -mtriple=
Similar to 806761a7629df268c8aed49657aeccffa6bca449

-mtriple= specifies the full target triple while -march= merely sets the
architecture part of the default target triple, leaving a target triple which
may not make sense.

Therefore, -march= is error-prone and not recommended for tests without a target
triple. The issue has been benign as we recognize $unknown-apple-darwin as ELF instead
of rejecting it outrightly.
2024-12-15 10:20:22 -08:00

36 lines
1.3 KiB
LLVM

; RUN: llc -mtriple=hexagon < %s | FileCheck %s
; This used to fail:
; LLVM ERROR: Cannot select: t54: v4i8 = select t50, t53, t52
; CHECK: jumpr r31
target triple = "hexagon"
@g0 = external dso_local unnamed_addr constant [41 x i8], align 1
define dso_local void @f0() local_unnamed_addr #0 {
b0:
%v0 = load <16 x i32>, ptr undef, align 16
%v1 = icmp eq <16 x i32> %v0, zeroinitializer
%v2 = or <16 x i1> %v1, zeroinitializer
%v3 = or <16 x i1> %v2, zeroinitializer
%v4 = or <16 x i1> %v3, zeroinitializer
%v5 = shufflevector <16 x i1> %v4, <16 x i1> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
%v6 = or <16 x i1> %v4, %v5
%v7 = extractelement <16 x i1> %v6, i32 0
%v8 = or i1 %v7, undef
%v9 = or i1 %v8, undef
br i1 %v9, label %b2, label %b1
b1: ; preds = %b0
call void (ptr, ...) @f1(ptr @g0)
unreachable
b2: ; preds = %b0
ret void
}
declare dso_local void @f1(ptr, ...) local_unnamed_addr #1
attributes #0 = { "target-cpu"="hexagonv66" "target-features"="+hvx-length64b,+hvxv66,+v66,-long-calls" }
attributes #1 = { "use-soft-float"="false" }