Beispiel #1
0
// Branch if any lane of V0 is zero; 64 bit => !min
unsigned anyZero64(uint16x4_t a) {
// CHECK: anyZero64:
// CHECK: uminv.8b b[[REGNO1:[0-9]+]], v0
// CHECK-NEXT: fmov w[[REGNO2:[0-9]+]], s[[REGNO1]]
// CHECK-NEXT: cbz w[[REGNO2]], [[LABEL:[.A-Z_0-9]+]]
// CHECK: [[LABEL]]:
// CHECK-NEXT: b {{_bar|bar}}
  if (!vminv_u8(a))
    return bar();
  return 0;
}
Beispiel #2
0
// Branch if all lanes of V0 are non-zero; 64 bit => min
unsigned allNonZero64(uint16x4_t a) {
// CHECK: allNonZero64:
// CHECK: uminv.8b b[[REGNO1:[0-9]+]], v0
// CHECK-NEXT: fmov w[[REGNO2:[0-9]+]], s[[REGNO1]]
// CHECK-NEXT: cbz w[[REGNO2]], [[LABEL:[.A-Z_0-9]+]]
// CHECK: [[LABEL]]:
// CHECK-NEXT: movz w0, #0
  if (vminv_u8(a))
    return bar();
  return 0;
}
// CHECK-LABEL: define i8 @test_vminv_u8(<8 x i8> %a) #0 {
// CHECK:   [[VMINV_I:%.*]] = call i32 @llvm.aarch64.neon.uminv.i32.v8i8(<8 x i8> %a) #2
// CHECK:   [[TMP0:%.*]] = trunc i32 [[VMINV_I]] to i8
// CHECK:   ret i8 [[TMP0]]
uint8_t test_vminv_u8(uint8x8_t a) {
  return vminv_u8(a);
}
Beispiel #4
0
uint8_t test_vminv_u8(uint8x8_t a) {
  // CHECK-LABEL: test_vminv_u8
  return vminv_u8(a);
  // CHECK: uminv {{b[0-9]+}}, {{v[0-9]+}}.8b
}