xref: /llvm-project/llvm/test/CodeGen/Hexagon/autohvx/hfsplat.ll (revision ff9af4c43ad71eeba2cabe99609cfaa0fd54c1d0)
1; RUN: llc -mtriple=hexagon < %s | FileCheck %s
2
3; Check that the vsplat instruction is generated
4; CHECK: r[[V:[0-9]+]] = #16752
5; CHECK: vsplat(r[[V]])
6
7target datalayout = "e-m:e-p:32:32:32-a:0-n16:32-i64:64:64-i32:32:32-i16:16:16-i1:8:8-f32:32:32-f64:64:64-v32:32:32-v64:64:64-v512:512:512-v1024:1024:1024-v2048:2048:2048"
8target triple = "hexagon"
9; Function Attrs: nofree norecurse nounwind writeonly
10define dso_local i32 @foo(ptr nocapture %0, i32 %1) local_unnamed_addr #0 {
11  %3 = icmp sgt i32 %1, 0
12  br i1 %3, label %4, label %22
13
144:                                                ; preds = %2
15  %5 = icmp ult i32 %1, 128
16  br i1 %5, label %6, label %9
17
186:                                                ; preds = %20, %4
19  %7 = phi ptr [ %0, %4 ], [ %11, %20 ]
20  %8 = phi i32 [ 0, %4 ], [ %10, %20 ]
21  br label %23
22
239:                                                ; preds = %4
24  %10 = and i32 %1, -128
25  %11 = getelementptr half, ptr %0, i32 %10
26  br label %12
27
2812:                                               ; preds = %12, %9
29  %13 = phi i32 [ 0, %9 ], [ %18, %12 ]
30  %14 = getelementptr half, ptr %0, i32 %13
31  %15 = bitcast ptr %14 to ptr
32  store <64 x half> <half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170>, ptr %15, align 2
33  %16 = getelementptr half, ptr %14, i32 64
34  %17 = bitcast ptr %16 to ptr
35  store <64 x half> <half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170, half 0xH4170>, ptr %17, align 2
36  %18 = add i32 %13, 128
37  %19 = icmp eq i32 %18, %10
38  br i1 %19, label %20, label %12
39
4020:                                               ; preds = %12
41  %21 = icmp eq i32 %10, %1
42  br i1 %21, label %22, label %6
43
4422:                                               ; preds = %23, %20, %2
45  ret i32 0
46
4723:                                               ; preds = %23, %6
48  %24 = phi ptr [ %28, %23 ], [ %7, %6 ]
49  %25 = phi i32 [ %26, %23 ], [ %8, %6 ]
50  store half 0xH4170, ptr %24, align 2
51  %26 = add nuw nsw i32 %25, 1
52  %27 = icmp eq i32 %26, %1
53  %28 = getelementptr half, ptr %24, i32 1
54  br i1 %27, label %22, label %23
55}
56
57attributes #0 = { nofree norecurse nounwind writeonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="hexagonv69" "target-features"="+hvx-length128b,+hvxv69,+v69,-long-calls" "unsafe-fp-math"="false" "use-soft-float"="false" }
58