92 lines
3.7 KiB
Plaintext
92 lines
3.7 KiB
Plaintext
// RUN: %{ispc} --target=host --nowrap --nostdlib -O2 --emit-llvm-text %s -o - | FileCheck %s
|
|
|
|
// CHECK-LABEL: @to_float16___vyhvyh(
|
|
// CHECK-NEXT: allocas:
|
|
// CHECK-NEXT: [[CMP:%.*]] = fcmp olt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
|
|
// CHECK-NEXT: [[CAST:%.*]] = uitofp <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
|
|
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
|
|
|
|
float16 to_float16(float16 a, float16 b) { return a < b; }
|
|
|
|
// CHECK-LABEL: @to_float___vyfvyf(
|
|
// CHECK-NEXT: allocas:
|
|
// CHECK-NEXT: [[CMP:%.*]] = fcmp olt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
|
|
// CHECK-NEXT: [[CAST:%.*]] = uitofp <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
|
|
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
|
|
|
|
float to_float(float a, float b) { return a < b; }
|
|
|
|
// CHECK-LABEL: @to_double___vydvyd(
|
|
// CHECK-NEXT: allocas:
|
|
// CHECK-NEXT: [[CMP:%.*]] = fcmp olt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
|
|
// CHECK-NEXT: [[CAST:%.*]] = uitofp <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
|
|
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
|
|
|
|
double to_double(double a, double b) { return a < b; }
|
|
|
|
// CHECK-LABEL: @to_int8___vytvyt(
|
|
// CHECK-NEXT: allocas:
|
|
// CHECK-NEXT: [[CMP:%.*]] = icmp slt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
|
|
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
|
|
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
|
|
|
|
int8 to_int8(int8 a, int8 b) { return a < b; }
|
|
|
|
// CHECK-LABEL: @to_uint8___vyTvyT(
|
|
// CHECK-NEXT: allocas:
|
|
// CHECK-NEXT: [[CMP:%.*]] = icmp ugt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
|
|
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
|
|
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
|
|
|
|
uint8 to_uint8(uint8 a, uint8 b) { return a > b; }
|
|
|
|
// CHECK-LABEL: @to_int16___vysvys(
|
|
// CHECK-NEXT: allocas:
|
|
// CHECK-NEXT: [[CMP:%.*]] = icmp slt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
|
|
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
|
|
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
|
|
|
|
int16 to_int16(int16 a, int16 b) { return a < b; }
|
|
|
|
// CHECK-LABEL: @to_uint16___vySvyS(
|
|
// CHECK-NEXT: allocas:
|
|
// CHECK-NEXT: [[CMP:%.*]] = icmp ugt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
|
|
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
|
|
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
|
|
|
|
uint16 to_uint16(uint16 a, uint16 b) { return a > b; }
|
|
|
|
// CHECK-LABEL: @to_int32___vyivyi(
|
|
// CHECK-NEXT: allocas:
|
|
// CHECK-NEXT: [[CMP:%.*]] = icmp slt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
|
|
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
|
|
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
|
|
|
|
int32 to_int32(int32 a, int32 b) { return a < b; }
|
|
|
|
// CHECK-LABEL: @to_uint32___vyuvyu(
|
|
// CHECK-NEXT: allocas:
|
|
// CHECK-NEXT: [[CMP:%.*]] = icmp ugt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
|
|
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
|
|
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
|
|
|
|
uint32 to_uint32(uint32 a, uint32 b) { return a > b; }
|
|
|
|
// CHECK-LABEL: @to_int64___vyIvyI(
|
|
// CHECK-NEXT: allocas:
|
|
// CHECK-NEXT: [[CMP:%.*]] = icmp slt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
|
|
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
|
|
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
|
|
|
|
int64 to_int64(int64 a, int64 b) { return a < b; }
|
|
|
|
// CHECK-LABEL: @to_uint64___vyUvyU(
|
|
// CHECK-NEXT: allocas:
|
|
// CHECK-NEXT: [[CMP:%.*]] = icmp ugt <[[WIDTH:.*]] x [[TYPE:.*]]> %a, %b
|
|
// CHECK-NEXT: [[CAST:%.*]] = zext <[[WIDTH]] x i1> [[CMP]] to <[[WIDTH]] x [[TYPE]]>
|
|
// CHECK-NEXT: ret <[[WIDTH]] x [[TYPE]]> [[CAST]]
|
|
|
|
uint64 to_uint64(uint64 a, uint64 b) { return a > b; }
|
|
|
|
bool to_bool(bool a, bool b) { return a == b; }
|