| ; Tests the conversion pattern for v64i1 to v64f16 |
| ; r0, r3 and r9 registers are i32 types converted from |
| ; v32i1 via a bitcasting sequence. |
| |
| ; RUN: llc -march=hexagon -mattr=+hvxv79,+hvx-length128b \ |
| ; RUN: %s -verify-machineinstrs -o - | FileCheck %s |
| |
| ; CHECK: [[V3:v[0-9]+]] = vsplat([[R0:r[0-9]+]]) |
| ; CHECK: [[Q0:q[0-9]+]] = vand([[V3]],[[R0]]) |
| ; CHECK: [[V4:v[0-9]+]].w = prefixsum([[Q0]]) |
| ; CHECK: [[V5:v[0-9]+]].w = vsub([[V4]].w,[[V3]].w) |
| ; CHECK: [[V1:v[0-9]+]] = vsplat(r |
| ; CHECK: [[V2:v[0-9]+]] = vsplat(r |
| ; CHECK: [[V6:v[0-9]+]].w = vlsr([[V1]].w,[[V5]].w) |
| ; CHECK: [[V7:v[0-9]+]].w = vlsr([[V2]].w,[[V5]].w) |
| ; CHECK: [[V8:v[0-9]+]] = vand([[V6]],[[V3]]) |
| ; CHECK: [[V9:v[0-9]+]] = vand([[V7]],[[V3]]) |
| ; CHECK: [[V10:v[0-9]+]].h = vpacke([[V9]].w,[[V8]].w) |
| ; CHECK: .hf = [[V10]].h |
| |
| define <64 x half> @uitofp_i1(<64 x i16> %in0, <64 x i16> %in1) |
| { |
| %in = icmp eq <64 x i16> %in0, %in1 |
| %fp0 = uitofp <64 x i1> %in to <64 x half> |
| %out = fadd <64 x half> %fp0, %fp0 |
| ret <64 x half> %out |
| } |