1*81ee3855SJustin Bogner; RUN: opt -S -passes=dxil-intrinsic-expansion,dxil-op-lower -mtriple=dxil-pc-shadermodel6.0-library < %s | FileCheck %s 2de1a97dbSFarzon Lotfi 3de1a97dbSFarzon Lotfi; Make sure dxil operation function calls for any are generated for float and half. 4de1a97dbSFarzon Lotfi 5de1a97dbSFarzon Lotfi; CHECK-LABEL: any_bool 6de1a97dbSFarzon Lotfi; CHECK: icmp ne i1 %{{.*}}, false 7de1a97dbSFarzon Lotfidefine noundef i1 @any_bool(i1 noundef %p0) { 8de1a97dbSFarzon Lotfientry: 9de1a97dbSFarzon Lotfi %p0.addr = alloca i8, align 1 10de1a97dbSFarzon Lotfi %frombool = zext i1 %p0 to i8 11de1a97dbSFarzon Lotfi store i8 %frombool, ptr %p0.addr, align 1 12de1a97dbSFarzon Lotfi %0 = load i8, ptr %p0.addr, align 1 13de1a97dbSFarzon Lotfi %tobool = trunc i8 %0 to i1 14de1a97dbSFarzon Lotfi %dx.any = call i1 @llvm.dx.any.i1(i1 %tobool) 15de1a97dbSFarzon Lotfi ret i1 %dx.any 16de1a97dbSFarzon Lotfi} 17de1a97dbSFarzon Lotfi 18de1a97dbSFarzon Lotfi; CHECK-LABEL: any_int64_t 19de1a97dbSFarzon Lotfi; CHECK: icmp ne i64 %{{.*}}, 0 20de1a97dbSFarzon Lotfidefine noundef i1 @any_int64_t(i64 noundef %p0) { 21de1a97dbSFarzon Lotfientry: 22de1a97dbSFarzon Lotfi %p0.addr = alloca i64, align 8 23de1a97dbSFarzon Lotfi store i64 %p0, ptr %p0.addr, align 8 24de1a97dbSFarzon Lotfi %0 = load i64, ptr %p0.addr, align 8 25de1a97dbSFarzon Lotfi %dx.any = call i1 @llvm.dx.any.i64(i64 %0) 26de1a97dbSFarzon Lotfi ret i1 %dx.any 27de1a97dbSFarzon Lotfi} 28de1a97dbSFarzon Lotfi 29de1a97dbSFarzon Lotfi; CHECK-LABEL: any_int 30de1a97dbSFarzon Lotfi; CHECK: icmp ne i32 %{{.*}}, 0 31de1a97dbSFarzon Lotfidefine noundef i1 @any_int(i32 noundef %p0) { 32de1a97dbSFarzon Lotfientry: 33de1a97dbSFarzon Lotfi %p0.addr = alloca i32, align 4 34de1a97dbSFarzon Lotfi store i32 %p0, ptr %p0.addr, align 4 35de1a97dbSFarzon Lotfi %0 = load i32, ptr %p0.addr, align 4 36de1a97dbSFarzon Lotfi %dx.any = call i1 @llvm.dx.any.i32(i32 %0) 37de1a97dbSFarzon Lotfi ret i1 %dx.any 38de1a97dbSFarzon Lotfi} 39de1a97dbSFarzon Lotfi 40de1a97dbSFarzon Lotfi; CHECK-LABEL: any_int16_t 41de1a97dbSFarzon Lotfi; CHECK: icmp ne i16 %{{.*}}, 0 42de1a97dbSFarzon Lotfidefine noundef i1 @any_int16_t(i16 noundef %p0) { 43de1a97dbSFarzon Lotfientry: 44de1a97dbSFarzon Lotfi %p0.addr = alloca i16, align 2 45de1a97dbSFarzon Lotfi store i16 %p0, ptr %p0.addr, align 2 46de1a97dbSFarzon Lotfi %0 = load i16, ptr %p0.addr, align 2 47de1a97dbSFarzon Lotfi %dx.any = call i1 @llvm.dx.any.i16(i16 %0) 48de1a97dbSFarzon Lotfi ret i1 %dx.any 49de1a97dbSFarzon Lotfi} 50de1a97dbSFarzon Lotfi 51de1a97dbSFarzon Lotfi; CHECK-LABEL: any_double 52de1a97dbSFarzon Lotfi; CHECK: fcmp une double %{{.*}}, 0.000000e+00 53de1a97dbSFarzon Lotfidefine noundef i1 @any_double(double noundef %p0) { 54de1a97dbSFarzon Lotfientry: 55de1a97dbSFarzon Lotfi %p0.addr = alloca double, align 8 56de1a97dbSFarzon Lotfi store double %p0, ptr %p0.addr, align 8 57de1a97dbSFarzon Lotfi %0 = load double, ptr %p0.addr, align 8 58de1a97dbSFarzon Lotfi %dx.any = call i1 @llvm.dx.any.f64(double %0) 59de1a97dbSFarzon Lotfi ret i1 %dx.any 60de1a97dbSFarzon Lotfi} 61de1a97dbSFarzon Lotfi 62de1a97dbSFarzon Lotfi; CHECK-LABEL: any_float 63de1a97dbSFarzon Lotfi; CHECK: fcmp une float %{{.*}}, 0.000000e+00 64de1a97dbSFarzon Lotfidefine noundef i1 @any_float(float noundef %p0) { 65de1a97dbSFarzon Lotfientry: 66de1a97dbSFarzon Lotfi %p0.addr = alloca float, align 4 67de1a97dbSFarzon Lotfi store float %p0, ptr %p0.addr, align 4 68de1a97dbSFarzon Lotfi %0 = load float, ptr %p0.addr, align 4 69de1a97dbSFarzon Lotfi %dx.any = call i1 @llvm.dx.any.f32(float %0) 70de1a97dbSFarzon Lotfi ret i1 %dx.any 71de1a97dbSFarzon Lotfi} 72de1a97dbSFarzon Lotfi 73de1a97dbSFarzon Lotfi; CHECK-LABEL: any_half 74de1a97dbSFarzon Lotfi; CHECK: fcmp une half %{{.*}}, 0xH0000 75de1a97dbSFarzon Lotfidefine noundef i1 @any_half(half noundef %p0) { 76de1a97dbSFarzon Lotfientry: 77de1a97dbSFarzon Lotfi %p0.addr = alloca half, align 2 78de1a97dbSFarzon Lotfi store half %p0, ptr %p0.addr, align 2 79de1a97dbSFarzon Lotfi %0 = load half, ptr %p0.addr, align 2 80de1a97dbSFarzon Lotfi %dx.any = call i1 @llvm.dx.any.f16(half %0) 81de1a97dbSFarzon Lotfi ret i1 %dx.any 82de1a97dbSFarzon Lotfi} 83de1a97dbSFarzon Lotfi 84de1a97dbSFarzon Lotfi; CHECK-LABEL: any_bool4 85de1a97dbSFarzon Lotfi; CHECK: icmp ne <4 x i1> %extractvec, zeroinitialize 86de1a97dbSFarzon Lotfi; CHECK: extractelement <4 x i1> %{{.*}}, i64 0 87de1a97dbSFarzon Lotfi; CHECK: extractelement <4 x i1> %{{.*}}, i64 1 88de1a97dbSFarzon Lotfi; CHECK: or i1 %{{.*}}, %{{.*}} 89de1a97dbSFarzon Lotfi; CHECK: extractelement <4 x i1> %{{.*}}, i64 2 90de1a97dbSFarzon Lotfi; CHECK: or i1 %{{.*}}, %{{.*}} 91de1a97dbSFarzon Lotfi; CHECK: extractelement <4 x i1> %{{.*}}, i64 3 92de1a97dbSFarzon Lotfi; CHECK: or i1 %{{.*}}, %{{.*}} 93de1a97dbSFarzon Lotfidefine noundef i1 @any_bool4(<4 x i1> noundef %p0) { 94de1a97dbSFarzon Lotfientry: 95de1a97dbSFarzon Lotfi %p0.addr = alloca i8, align 1 96de1a97dbSFarzon Lotfi %insertvec = shufflevector <4 x i1> %p0, <4 x i1> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison> 97de1a97dbSFarzon Lotfi %0 = bitcast <8 x i1> %insertvec to i8 98de1a97dbSFarzon Lotfi store i8 %0, ptr %p0.addr, align 1 99de1a97dbSFarzon Lotfi %load_bits = load i8, ptr %p0.addr, align 1 100de1a97dbSFarzon Lotfi %1 = bitcast i8 %load_bits to <8 x i1> 101de1a97dbSFarzon Lotfi %extractvec = shufflevector <8 x i1> %1, <8 x i1> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 102de1a97dbSFarzon Lotfi %dx.any = call i1 @llvm.dx.any.v4i1(<4 x i1> %extractvec) 103de1a97dbSFarzon Lotfi ret i1 %dx.any 104de1a97dbSFarzon Lotfi} 105de1a97dbSFarzon Lotfi 106de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.v4i1(<4 x i1>) 107de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.i1(i1) 108de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.i16(i16) 109de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.i32(i32) 110de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.i64(i64) 111de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.f16(half) 112de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.f32(float) 113de1a97dbSFarzon Lotfideclare i1 @llvm.dx.any.f64(double) 114