1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=+avx512fp16 | FileCheck %s 3 4declare <8 x half> @llvm.ceil.v8f16(<8 x half>) 5declare <16 x half> @llvm.ceil.v16f16(<16 x half>) 6declare <32 x half> @llvm.ceil.v32f16(<32 x half>) 7 8define <8 x half> @ceil_v8f16(<8 x half> %p) { 9; CHECK-LABEL: ceil_v8f16: 10; CHECK: ## %bb.0: 11; CHECK-NEXT: vrndscaleph $10, %xmm0, %xmm0 12; CHECK-NEXT: retq 13 %t = call <8 x half> @llvm.ceil.v8f16(<8 x half> %p) 14 ret <8 x half> %t 15} 16 17define <16 x half> @ceil_v16f16(<16 x half> %p) { 18; CHECK-LABEL: ceil_v16f16: 19; CHECK: ## %bb.0: 20; CHECK-NEXT: vrndscaleph $10, %ymm0, %ymm0 21; CHECK-NEXT: retq 22 %t = call <16 x half> @llvm.ceil.v16f16(<16 x half> %p) 23 ret <16 x half> %t 24} 25 26define <32 x half> @ceil_v32f16(<32 x half> %p) { 27; CHECK-LABEL: ceil_v32f16: 28; CHECK: ## %bb.0: 29; CHECK-NEXT: vrndscaleph $10, %zmm0, %zmm0 30; CHECK-NEXT: retq 31 %t = call <32 x half> @llvm.ceil.v32f16(<32 x half> %p) 32 ret <32 x half> %t 33} 34 35declare <8 x half> @llvm.floor.v8f16(<8 x half>) 36declare <16 x half> @llvm.floor.v16f16(<16 x half>) 37declare <32 x half> @llvm.floor.v32f16(<32 x half>) 38 39define <8 x half> @floor_v8f16(<8 x half> %p) { 40; CHECK-LABEL: floor_v8f16: 41; CHECK: ## %bb.0: 42; CHECK-NEXT: vrndscaleph $9, %xmm0, %xmm0 43; CHECK-NEXT: retq 44 %t = call <8 x half> @llvm.floor.v8f16(<8 x half> %p) 45 ret <8 x half> %t 46} 47 48define <16 x half> @floor_v16f16(<16 x half> %p) { 49; CHECK-LABEL: floor_v16f16: 50; CHECK: ## %bb.0: 51; CHECK-NEXT: vrndscaleph $9, %ymm0, %ymm0 52; CHECK-NEXT: retq 53 %t = call <16 x half> @llvm.floor.v16f16(<16 x half> %p) 54 ret <16 x half> %t 55} 56 57define <32 x half> @floor_v32f16(<32 x half> %p) { 58; CHECK-LABEL: floor_v32f16: 59; CHECK: ## %bb.0: 60; CHECK-NEXT: vrndscaleph $9, %zmm0, %zmm0 61; CHECK-NEXT: retq 62 %t = call <32 x half> @llvm.floor.v32f16(<32 x half> %p) 63 ret <32 x half> %t 64} 65 66declare <8 x half> @llvm.trunc.v8f16(<8 x half>) 67declare <16 x half> @llvm.trunc.v16f16(<16 x half>) 68declare <32 x half> @llvm.trunc.v32f16(<32 x half>) 69 70define <8 x half> @trunc_v8f16(<8 x half> %p) { 71; CHECK-LABEL: trunc_v8f16: 72; CHECK: ## %bb.0: 73; CHECK-NEXT: vrndscaleph $11, %xmm0, %xmm0 74; CHECK-NEXT: retq 75 %t = call <8 x half> @llvm.trunc.v8f16(<8 x half> %p) 76 ret <8 x half> %t 77} 78 79define <16 x half> @trunc_v16f16(<16 x half> %p) { 80; CHECK-LABEL: trunc_v16f16: 81; CHECK: ## %bb.0: 82; CHECK-NEXT: vrndscaleph $11, %ymm0, %ymm0 83; CHECK-NEXT: retq 84 %t = call <16 x half> @llvm.trunc.v16f16(<16 x half> %p) 85 ret <16 x half> %t 86} 87 88define <32 x half> @trunc_v32f16(<32 x half> %p) { 89; CHECK-LABEL: trunc_v32f16: 90; CHECK: ## %bb.0: 91; CHECK-NEXT: vrndscaleph $11, %zmm0, %zmm0 92; CHECK-NEXT: retq 93 %t = call <32 x half> @llvm.trunc.v32f16(<32 x half> %p) 94 ret <32 x half> %t 95} 96 97declare <8 x half> @llvm.nearbyint.v8f16(<8 x half>) 98declare <16 x half> @llvm.nearbyint.v16f16(<16 x half>) 99declare <32 x half> @llvm.nearbyint.v32f16(<32 x half>) 100 101define <8 x half> @nearbyint_v8f16(<8 x half> %p) { 102; CHECK-LABEL: nearbyint_v8f16: 103; CHECK: ## %bb.0: 104; CHECK-NEXT: vrndscaleph $12, %xmm0, %xmm0 105; CHECK-NEXT: retq 106 %t = call <8 x half> @llvm.nearbyint.v8f16(<8 x half> %p) 107 ret <8 x half> %t 108} 109 110define <16 x half> @nearbyint_v16f16(<16 x half> %p) { 111; CHECK-LABEL: nearbyint_v16f16: 112; CHECK: ## %bb.0: 113; CHECK-NEXT: vrndscaleph $12, %ymm0, %ymm0 114; CHECK-NEXT: retq 115 %t = call <16 x half> @llvm.nearbyint.v16f16(<16 x half> %p) 116 ret <16 x half> %t 117} 118 119define <32 x half> @nearbyint_v32f16(<32 x half> %p) { 120; CHECK-LABEL: nearbyint_v32f16: 121; CHECK: ## %bb.0: 122; CHECK-NEXT: vrndscaleph $12, %zmm0, %zmm0 123; CHECK-NEXT: retq 124 %t = call <32 x half> @llvm.nearbyint.v32f16(<32 x half> %p) 125 ret <32 x half> %t 126} 127 128declare <8 x half> @llvm.rint.v8f16(<8 x half>) 129declare <16 x half> @llvm.rint.v16f16(<16 x half>) 130declare <32 x half> @llvm.rint.v32f16(<32 x half>) 131 132define <8 x half> @rint_v8f16(<8 x half> %p) { 133; CHECK-LABEL: rint_v8f16: 134; CHECK: ## %bb.0: 135; CHECK-NEXT: vrndscaleph $4, %xmm0, %xmm0 136; CHECK-NEXT: retq 137 %t = call <8 x half> @llvm.rint.v8f16(<8 x half> %p) 138 ret <8 x half> %t 139} 140 141define <16 x half> @rint_v16f16(<16 x half> %p) { 142; CHECK-LABEL: rint_v16f16: 143; CHECK: ## %bb.0: 144; CHECK-NEXT: vrndscaleph $4, %ymm0, %ymm0 145; CHECK-NEXT: retq 146 %t = call <16 x half> @llvm.rint.v16f16(<16 x half> %p) 147 ret <16 x half> %t 148} 149 150define <32 x half> @rint_v32f16(<32 x half> %p) { 151; CHECK-LABEL: rint_v32f16: 152; CHECK: ## %bb.0: 153; CHECK-NEXT: vrndscaleph $4, %zmm0, %zmm0 154; CHECK-NEXT: retq 155 %t = call <32 x half> @llvm.rint.v32f16(<32 x half> %p) 156 ret <32 x half> %t 157} 158