166ee7940SMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 266ee7940SMatt Arsenault; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=amdgpu-simplifylib %s | FileCheck %s 366ee7940SMatt Arsenault 4*32f9983cSJessica Deltarget datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-p7:160:256:256:32-p8:128:128-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7:8:9" 566ee7940SMatt Arsenault 666ee7940SMatt Arsenaultdeclare <2 x float> @_Z5ldexpDv2_fi(<2 x float>, i32) 766ee7940SMatt Arsenaultdeclare <3 x float> @_Z5ldexpDv3_fi(<3 x float>, i32) 866ee7940SMatt Arsenaultdeclare <4 x float> @_Z5ldexpDv4_fi(<4 x float>, i32) 966ee7940SMatt Arsenaultdeclare <8 x float> @_Z5ldexpDv8_fi(<8 x float>, i32) 1066ee7940SMatt Arsenaultdeclare <16 x float> @_Z5ldexpDv16_fi(<16 x float>, i32) 1166ee7940SMatt Arsenaultdeclare <2 x double> @_Z5ldexpDv2_di(<2 x double>, i32) 1266ee7940SMatt Arsenaultdeclare <3 x double> @_Z5ldexpDv3_di(<3 x double>, i32) 1366ee7940SMatt Arsenaultdeclare <4 x double> @_Z5ldexpDv4_di(<4 x double>, i32) 1466ee7940SMatt Arsenaultdeclare <8 x double> @_Z5ldexpDv8_di(<8 x double>, i32) 1566ee7940SMatt Arsenaultdeclare <16 x double> @_Z5ldexpDv16_di(<16 x double>, i32) 1666ee7940SMatt Arsenaultdeclare <2 x half> @_Z5ldexpDv2_Dhi(<2 x half>, i32) 1766ee7940SMatt Arsenaultdeclare <3 x half> @_Z5ldexpDv3_Dhi(<3 x half>, i32) 1866ee7940SMatt Arsenaultdeclare <4 x half> @_Z5ldexpDv4_Dhi(<4 x half>, i32) 1966ee7940SMatt Arsenaultdeclare <8 x half> @_Z5ldexpDv8_Dhi(<8 x half>, i32) 2066ee7940SMatt Arsenaultdeclare <16 x half> @_Z5ldexpDv16_Dhi(<16 x half>, i32) 2166ee7940SMatt Arsenault 2266ee7940SMatt Arsenaultdefine <2 x float> @test_ldexp_v2f32_i32(<2 x float> %x, i32 %y) { 2366ee7940SMatt Arsenault; CHECK-LABEL: define <2 x float> @test_ldexp_v2f32_i32 2466ee7940SMatt Arsenault; CHECK-SAME: (<2 x float> [[X:%.*]], i32 [[Y:%.*]]) { 2566ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <2 x i32> poison, i32 [[Y]], i64 0 2666ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <2 x i32> [[DOTSPLATINSERT]], <2 x i32> poison, <2 x i32> zeroinitializer 2766ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> [[X]], <2 x i32> [[DOTSPLAT]]) 2866ee7940SMatt Arsenault; CHECK-NEXT: ret <2 x float> [[LDEXP]] 2966ee7940SMatt Arsenault; 3066ee7940SMatt Arsenault %ldexp = tail call <2 x float> @_Z5ldexpDv2_fi(<2 x float> %x, i32 %y) 3166ee7940SMatt Arsenault ret <2 x float> %ldexp 3266ee7940SMatt Arsenault} 3366ee7940SMatt Arsenault 3466ee7940SMatt Arsenaultdefine <3 x float> @test_ldexp_v3f32_i32(<3 x float> %x, i32 %y) { 3566ee7940SMatt Arsenault; CHECK-LABEL: define <3 x float> @test_ldexp_v3f32_i32 3666ee7940SMatt Arsenault; CHECK-SAME: (<3 x float> [[X:%.*]], i32 [[Y:%.*]]) { 3766ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <3 x i32> poison, i32 [[Y]], i64 0 3866ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <3 x i32> [[DOTSPLATINSERT]], <3 x i32> poison, <3 x i32> zeroinitializer 3966ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <3 x float> @llvm.ldexp.v3f32.v3i32(<3 x float> [[X]], <3 x i32> [[DOTSPLAT]]) 4066ee7940SMatt Arsenault; CHECK-NEXT: ret <3 x float> [[LDEXP]] 4166ee7940SMatt Arsenault; 4266ee7940SMatt Arsenault %ldexp = tail call <3 x float> @_Z5ldexpDv3_fi(<3 x float> %x, i32 %y) 4366ee7940SMatt Arsenault ret <3 x float> %ldexp 4466ee7940SMatt Arsenault} 4566ee7940SMatt Arsenault 4666ee7940SMatt Arsenaultdefine <4 x float> @test_ldexp_v4f32_i32(<4 x float> %x, i32 %y) { 4766ee7940SMatt Arsenault; CHECK-LABEL: define <4 x float> @test_ldexp_v4f32_i32 4866ee7940SMatt Arsenault; CHECK-SAME: (<4 x float> [[X:%.*]], i32 [[Y:%.*]]) { 4966ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <4 x i32> poison, i32 [[Y]], i64 0 5066ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <4 x i32> [[DOTSPLATINSERT]], <4 x i32> poison, <4 x i32> zeroinitializer 5166ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <4 x float> @llvm.ldexp.v4f32.v4i32(<4 x float> [[X]], <4 x i32> [[DOTSPLAT]]) 5266ee7940SMatt Arsenault; CHECK-NEXT: ret <4 x float> [[LDEXP]] 5366ee7940SMatt Arsenault; 5466ee7940SMatt Arsenault %ldexp = tail call <4 x float> @_Z5ldexpDv4_fi(<4 x float> %x, i32 %y) 5566ee7940SMatt Arsenault ret <4 x float> %ldexp 5666ee7940SMatt Arsenault} 5766ee7940SMatt Arsenault 5866ee7940SMatt Arsenaultdefine <8 x float> @test_ldexp_v8f32_i32(<8 x float> %x, i32 %y) { 5966ee7940SMatt Arsenault; CHECK-LABEL: define <8 x float> @test_ldexp_v8f32_i32 6066ee7940SMatt Arsenault; CHECK-SAME: (<8 x float> [[X:%.*]], i32 [[Y:%.*]]) { 6166ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <8 x i32> poison, i32 [[Y]], i64 0 6266ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <8 x i32> [[DOTSPLATINSERT]], <8 x i32> poison, <8 x i32> zeroinitializer 6366ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <8 x float> @llvm.ldexp.v8f32.v8i32(<8 x float> [[X]], <8 x i32> [[DOTSPLAT]]) 6466ee7940SMatt Arsenault; CHECK-NEXT: ret <8 x float> [[LDEXP]] 6566ee7940SMatt Arsenault; 6666ee7940SMatt Arsenault %ldexp = tail call <8 x float> @_Z5ldexpDv8_fi(<8 x float> %x, i32 %y) 6766ee7940SMatt Arsenault ret <8 x float> %ldexp 6866ee7940SMatt Arsenault} 6966ee7940SMatt Arsenault 7066ee7940SMatt Arsenaultdefine <16 x float> @test_ldexp_v16f32_i32(<16 x float> %x, i32 %y) { 7166ee7940SMatt Arsenault; CHECK-LABEL: define <16 x float> @test_ldexp_v16f32_i32 7266ee7940SMatt Arsenault; CHECK-SAME: (<16 x float> [[X:%.*]], i32 [[Y:%.*]]) { 7366ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <16 x i32> poison, i32 [[Y]], i64 0 7466ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <16 x i32> [[DOTSPLATINSERT]], <16 x i32> poison, <16 x i32> zeroinitializer 7566ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <16 x float> @llvm.ldexp.v16f32.v16i32(<16 x float> [[X]], <16 x i32> [[DOTSPLAT]]) 7666ee7940SMatt Arsenault; CHECK-NEXT: ret <16 x float> [[LDEXP]] 7766ee7940SMatt Arsenault; 7866ee7940SMatt Arsenault %ldexp = tail call <16 x float> @_Z5ldexpDv16_fi(<16 x float> %x, i32 %y) 7966ee7940SMatt Arsenault ret <16 x float> %ldexp 8066ee7940SMatt Arsenault} 8166ee7940SMatt Arsenault 8266ee7940SMatt Arsenaultdefine <2 x double> @test_ldexp_v2f64_i32(<2 x double> %x, i32 %y) { 8366ee7940SMatt Arsenault; CHECK-LABEL: define <2 x double> @test_ldexp_v2f64_i32 8466ee7940SMatt Arsenault; CHECK-SAME: (<2 x double> [[X:%.*]], i32 [[Y:%.*]]) { 8566ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <2 x i32> poison, i32 [[Y]], i64 0 8666ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <2 x i32> [[DOTSPLATINSERT]], <2 x i32> poison, <2 x i32> zeroinitializer 8766ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <2 x double> @llvm.ldexp.v2f64.v2i32(<2 x double> [[X]], <2 x i32> [[DOTSPLAT]]) 8866ee7940SMatt Arsenault; CHECK-NEXT: ret <2 x double> [[LDEXP]] 8966ee7940SMatt Arsenault; 9066ee7940SMatt Arsenault %ldexp = tail call <2 x double> @_Z5ldexpDv2_di(<2 x double> %x, i32 %y) 9166ee7940SMatt Arsenault ret <2 x double> %ldexp 9266ee7940SMatt Arsenault} 9366ee7940SMatt Arsenault 9466ee7940SMatt Arsenaultdefine <3 x double> @test_ldexp_v3f64_i32(<3 x double> %x, i32 %y) { 9566ee7940SMatt Arsenault; CHECK-LABEL: define <3 x double> @test_ldexp_v3f64_i32 9666ee7940SMatt Arsenault; CHECK-SAME: (<3 x double> [[X:%.*]], i32 [[Y:%.*]]) { 9766ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <3 x i32> poison, i32 [[Y]], i64 0 9866ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <3 x i32> [[DOTSPLATINSERT]], <3 x i32> poison, <3 x i32> zeroinitializer 9966ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <3 x double> @llvm.ldexp.v3f64.v3i32(<3 x double> [[X]], <3 x i32> [[DOTSPLAT]]) 10066ee7940SMatt Arsenault; CHECK-NEXT: ret <3 x double> [[LDEXP]] 10166ee7940SMatt Arsenault; 10266ee7940SMatt Arsenault %ldexp = tail call <3 x double> @_Z5ldexpDv3_di(<3 x double> %x, i32 %y) 10366ee7940SMatt Arsenault ret <3 x double> %ldexp 10466ee7940SMatt Arsenault} 10566ee7940SMatt Arsenault 10666ee7940SMatt Arsenaultdefine <4 x double> @test_ldexp_v4f64_i32(<4 x double> %x, i32 %y) { 10766ee7940SMatt Arsenault; CHECK-LABEL: define <4 x double> @test_ldexp_v4f64_i32 10866ee7940SMatt Arsenault; CHECK-SAME: (<4 x double> [[X:%.*]], i32 [[Y:%.*]]) { 10966ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <4 x i32> poison, i32 [[Y]], i64 0 11066ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <4 x i32> [[DOTSPLATINSERT]], <4 x i32> poison, <4 x i32> zeroinitializer 11166ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <4 x double> @llvm.ldexp.v4f64.v4i32(<4 x double> [[X]], <4 x i32> [[DOTSPLAT]]) 11266ee7940SMatt Arsenault; CHECK-NEXT: ret <4 x double> [[LDEXP]] 11366ee7940SMatt Arsenault; 11466ee7940SMatt Arsenault %ldexp = tail call <4 x double> @_Z5ldexpDv4_di(<4 x double> %x, i32 %y) 11566ee7940SMatt Arsenault ret <4 x double> %ldexp 11666ee7940SMatt Arsenault} 11766ee7940SMatt Arsenault 11866ee7940SMatt Arsenaultdefine <8 x double> @test_ldexp_v8f64_i32(<8 x double> %x, i32 %y) { 11966ee7940SMatt Arsenault; CHECK-LABEL: define <8 x double> @test_ldexp_v8f64_i32 12066ee7940SMatt Arsenault; CHECK-SAME: (<8 x double> [[X:%.*]], i32 [[Y:%.*]]) { 12166ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <8 x i32> poison, i32 [[Y]], i64 0 12266ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <8 x i32> [[DOTSPLATINSERT]], <8 x i32> poison, <8 x i32> zeroinitializer 12366ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <8 x double> @llvm.ldexp.v8f64.v8i32(<8 x double> [[X]], <8 x i32> [[DOTSPLAT]]) 12466ee7940SMatt Arsenault; CHECK-NEXT: ret <8 x double> [[LDEXP]] 12566ee7940SMatt Arsenault; 12666ee7940SMatt Arsenault %ldexp = tail call <8 x double> @_Z5ldexpDv8_di(<8 x double> %x, i32 %y) 12766ee7940SMatt Arsenault ret <8 x double> %ldexp 12866ee7940SMatt Arsenault} 12966ee7940SMatt Arsenault 13066ee7940SMatt Arsenaultdefine <16 x double> @test_ldexp_v16f64_i32(<16 x double> %x, i32 %y) { 13166ee7940SMatt Arsenault; CHECK-LABEL: define <16 x double> @test_ldexp_v16f64_i32 13266ee7940SMatt Arsenault; CHECK-SAME: (<16 x double> [[X:%.*]], i32 [[Y:%.*]]) { 13366ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <16 x i32> poison, i32 [[Y]], i64 0 13466ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <16 x i32> [[DOTSPLATINSERT]], <16 x i32> poison, <16 x i32> zeroinitializer 13566ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <16 x double> @llvm.ldexp.v16f64.v16i32(<16 x double> [[X]], <16 x i32> [[DOTSPLAT]]) 13666ee7940SMatt Arsenault; CHECK-NEXT: ret <16 x double> [[LDEXP]] 13766ee7940SMatt Arsenault; 13866ee7940SMatt Arsenault %ldexp = tail call <16 x double> @_Z5ldexpDv16_di(<16 x double> %x, i32 %y) 13966ee7940SMatt Arsenault ret <16 x double> %ldexp 14066ee7940SMatt Arsenault} 14166ee7940SMatt Arsenault 14266ee7940SMatt Arsenaultdefine <2 x half> @test_ldexp_v2f16_i32(<2 x half> %x, i32 %y) { 14366ee7940SMatt Arsenault; CHECK-LABEL: define <2 x half> @test_ldexp_v2f16_i32 14466ee7940SMatt Arsenault; CHECK-SAME: (<2 x half> [[X:%.*]], i32 [[Y:%.*]]) { 14566ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <2 x i32> poison, i32 [[Y]], i64 0 14666ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <2 x i32> [[DOTSPLATINSERT]], <2 x i32> poison, <2 x i32> zeroinitializer 14766ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <2 x half> @llvm.ldexp.v2f16.v2i32(<2 x half> [[X]], <2 x i32> [[DOTSPLAT]]) 14866ee7940SMatt Arsenault; CHECK-NEXT: ret <2 x half> [[LDEXP]] 14966ee7940SMatt Arsenault; 15066ee7940SMatt Arsenault %ldexp = tail call <2 x half> @_Z5ldexpDv2_Dhi(<2 x half> %x, i32 %y) 15166ee7940SMatt Arsenault ret <2 x half> %ldexp 15266ee7940SMatt Arsenault} 15366ee7940SMatt Arsenault 15466ee7940SMatt Arsenaultdefine <3 x half> @test_ldexp_v3f16_i32(<3 x half> %x, i32 %y) { 15566ee7940SMatt Arsenault; CHECK-LABEL: define <3 x half> @test_ldexp_v3f16_i32 15666ee7940SMatt Arsenault; CHECK-SAME: (<3 x half> [[X:%.*]], i32 [[Y:%.*]]) { 15766ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <3 x i32> poison, i32 [[Y]], i64 0 15866ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <3 x i32> [[DOTSPLATINSERT]], <3 x i32> poison, <3 x i32> zeroinitializer 15966ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <3 x half> @llvm.ldexp.v3f16.v3i32(<3 x half> [[X]], <3 x i32> [[DOTSPLAT]]) 16066ee7940SMatt Arsenault; CHECK-NEXT: ret <3 x half> [[LDEXP]] 16166ee7940SMatt Arsenault; 16266ee7940SMatt Arsenault %ldexp = tail call <3 x half> @_Z5ldexpDv3_Dhi(<3 x half> %x, i32 %y) 16366ee7940SMatt Arsenault ret <3 x half> %ldexp 16466ee7940SMatt Arsenault} 16566ee7940SMatt Arsenault 16666ee7940SMatt Arsenaultdefine <4 x half> @test_ldexp_v4f16_i32(<4 x half> %x, i32 %y) { 16766ee7940SMatt Arsenault; CHECK-LABEL: define <4 x half> @test_ldexp_v4f16_i32 16866ee7940SMatt Arsenault; CHECK-SAME: (<4 x half> [[X:%.*]], i32 [[Y:%.*]]) { 16966ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <4 x i32> poison, i32 [[Y]], i64 0 17066ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <4 x i32> [[DOTSPLATINSERT]], <4 x i32> poison, <4 x i32> zeroinitializer 17166ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <4 x half> @llvm.ldexp.v4f16.v4i32(<4 x half> [[X]], <4 x i32> [[DOTSPLAT]]) 17266ee7940SMatt Arsenault; CHECK-NEXT: ret <4 x half> [[LDEXP]] 17366ee7940SMatt Arsenault; 17466ee7940SMatt Arsenault %ldexp = tail call <4 x half> @_Z5ldexpDv4_Dhi(<4 x half> %x, i32 %y) 17566ee7940SMatt Arsenault ret <4 x half> %ldexp 17666ee7940SMatt Arsenault} 17766ee7940SMatt Arsenault 17866ee7940SMatt Arsenaultdefine <8 x half> @test_ldexp_v8f16_i32(<8 x half> %x, i32 %y) { 17966ee7940SMatt Arsenault; CHECK-LABEL: define <8 x half> @test_ldexp_v8f16_i32 18066ee7940SMatt Arsenault; CHECK-SAME: (<8 x half> [[X:%.*]], i32 [[Y:%.*]]) { 18166ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <8 x i32> poison, i32 [[Y]], i64 0 18266ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <8 x i32> [[DOTSPLATINSERT]], <8 x i32> poison, <8 x i32> zeroinitializer 18366ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <8 x half> @llvm.ldexp.v8f16.v8i32(<8 x half> [[X]], <8 x i32> [[DOTSPLAT]]) 18466ee7940SMatt Arsenault; CHECK-NEXT: ret <8 x half> [[LDEXP]] 18566ee7940SMatt Arsenault; 18666ee7940SMatt Arsenault %ldexp = tail call <8 x half> @_Z5ldexpDv8_Dhi(<8 x half> %x, i32 %y) 18766ee7940SMatt Arsenault ret <8 x half> %ldexp 18866ee7940SMatt Arsenault} 18966ee7940SMatt Arsenault 19066ee7940SMatt Arsenaultdefine <16 x half> @test_ldexp_v16f16_i32(<16 x half> %x, i32 %y) { 19166ee7940SMatt Arsenault; CHECK-LABEL: define <16 x half> @test_ldexp_v16f16_i32 19266ee7940SMatt Arsenault; CHECK-SAME: (<16 x half> [[X:%.*]], i32 [[Y:%.*]]) { 19366ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <16 x i32> poison, i32 [[Y]], i64 0 19466ee7940SMatt Arsenault; CHECK-NEXT: [[DOTSPLAT:%.*]] = shufflevector <16 x i32> [[DOTSPLATINSERT]], <16 x i32> poison, <16 x i32> zeroinitializer 19566ee7940SMatt Arsenault; CHECK-NEXT: [[LDEXP:%.*]] = tail call <16 x half> @llvm.ldexp.v16f16.v16i32(<16 x half> [[X]], <16 x i32> [[DOTSPLAT]]) 19666ee7940SMatt Arsenault; CHECK-NEXT: ret <16 x half> [[LDEXP]] 19766ee7940SMatt Arsenault; 19866ee7940SMatt Arsenault %ldexp = tail call <16 x half> @_Z5ldexpDv16_Dhi(<16 x half> %x, i32 %y) 19966ee7940SMatt Arsenault ret <16 x half> %ldexp 20066ee7940SMatt Arsenault} 201