1a8376bbeSMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 2a8376bbeSMatt Arsenault; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=amdgpu-simplifylib %s | FileCheck %s 3a8376bbeSMatt 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" 5a8376bbeSMatt Arsenault 6a8376bbeSMatt Arsenaultdeclare float @_Z8copysignff(float, float) 7a8376bbeSMatt Arsenaultdeclare <2 x float> @_Z8copysignDv2_fS_(<2 x float>, <2 x float>) 8a8376bbeSMatt Arsenaultdeclare <3 x float> @_Z8copysignDv3_fS_(<3 x float>, <3 x float>) 9a8376bbeSMatt Arsenaultdeclare <4 x float> @_Z8copysignDv4_fS_(<4 x float>, <4 x float>) 10a8376bbeSMatt Arsenaultdeclare <8 x float> @_Z8copysignDv8_fS_(<8 x float>, <8 x float>) 11a8376bbeSMatt Arsenaultdeclare <16 x float> @_Z8copysignDv16_fS_(<16 x float>, <16 x float>) 12a8376bbeSMatt Arsenaultdeclare double @_Z8copysigndd(double, double) 13a8376bbeSMatt Arsenaultdeclare <2 x double> @_Z8copysignDv2_dS_(<2 x double>, <2 x double>) 14a8376bbeSMatt Arsenaultdeclare <3 x double> @_Z8copysignDv3_dS_(<3 x double>, <3 x double>) 15a8376bbeSMatt Arsenaultdeclare <4 x double> @_Z8copysignDv4_dS_(<4 x double>, <4 x double>) 16a8376bbeSMatt Arsenaultdeclare <8 x double> @_Z8copysignDv8_dS_(<8 x double>, <8 x double>) 17a8376bbeSMatt Arsenaultdeclare <16 x double> @_Z8copysignDv16_dS_(<16 x double>, <16 x double>) 18a8376bbeSMatt Arsenaultdeclare half @_Z8copysignDhDh(half, half) 19a8376bbeSMatt Arsenaultdeclare <2 x half> @_Z8copysignDv2_DhS_(<2 x half>, <2 x half>) 20a8376bbeSMatt Arsenaultdeclare <3 x half> @_Z8copysignDv3_DhS_(<3 x half>, <3 x half>) 21a8376bbeSMatt Arsenaultdeclare <4 x half> @_Z8copysignDv4_DhS_(<4 x half>, <4 x half>) 22a8376bbeSMatt Arsenaultdeclare <8 x half> @_Z8copysignDv8_DhS_(<8 x half>, <8 x half>) 23a8376bbeSMatt Arsenaultdeclare <16 x half> @_Z8copysignDv16_DhS_(<16 x half>, <16 x half>) 24a8376bbeSMatt Arsenault 25a8376bbeSMatt Arsenaultdefine float @test_copysign_f32(float %x, float %y) { 26a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_copysign_f32 27a8376bbeSMatt Arsenault; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) { 28c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call float @llvm.copysign.f32(float [[X]], float [[Y]]) 29a8376bbeSMatt Arsenault; CHECK-NEXT: ret float [[COPYSIGN]] 30a8376bbeSMatt Arsenault; 31a8376bbeSMatt Arsenault %copysign = tail call float @_Z8copysignff(float %x, float %y) 32a8376bbeSMatt Arsenault ret float %copysign 33a8376bbeSMatt Arsenault} 34a8376bbeSMatt Arsenault 35a8376bbeSMatt Arsenaultdefine float @test_copysign_f32_nnan(float %x, float %y) { 36a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_copysign_f32_nnan 37a8376bbeSMatt Arsenault; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) { 38c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call nnan float @llvm.copysign.f32(float [[X]], float [[Y]]) 39a8376bbeSMatt Arsenault; CHECK-NEXT: ret float [[COPYSIGN]] 40a8376bbeSMatt Arsenault; 41a8376bbeSMatt Arsenault %copysign = tail call nnan float @_Z8copysignff(float %x, float %y) 42a8376bbeSMatt Arsenault ret float %copysign 43a8376bbeSMatt Arsenault} 44a8376bbeSMatt Arsenault 45a8376bbeSMatt Arsenaultdefine <2 x float> @test_copysign_v2f32(<2 x float> %x, <2 x float> %y) { 46a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x float> @test_copysign_v2f32 47a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x float> [[X:%.*]], <2 x float> [[Y:%.*]]) { 48c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <2 x float> @llvm.copysign.v2f32(<2 x float> [[X]], <2 x float> [[Y]]) 49a8376bbeSMatt Arsenault; CHECK-NEXT: ret <2 x float> [[COPYSIGN]] 50a8376bbeSMatt Arsenault; 51a8376bbeSMatt Arsenault %copysign = tail call <2 x float> @_Z8copysignDv2_fS_(<2 x float> %x, <2 x float> %y) 52a8376bbeSMatt Arsenault ret <2 x float> %copysign 53a8376bbeSMatt Arsenault} 54a8376bbeSMatt Arsenault 55a8376bbeSMatt Arsenaultdefine <3 x float> @test_copysign_v3f32(<3 x float> %x, <3 x float> %y) { 56a8376bbeSMatt Arsenault; CHECK-LABEL: define <3 x float> @test_copysign_v3f32 57a8376bbeSMatt Arsenault; CHECK-SAME: (<3 x float> [[X:%.*]], <3 x float> [[Y:%.*]]) { 58c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <3 x float> @llvm.copysign.v3f32(<3 x float> [[X]], <3 x float> [[Y]]) 59a8376bbeSMatt Arsenault; CHECK-NEXT: ret <3 x float> [[COPYSIGN]] 60a8376bbeSMatt Arsenault; 61a8376bbeSMatt Arsenault %copysign = tail call <3 x float> @_Z8copysignDv3_fS_(<3 x float> %x, <3 x float> %y) 62a8376bbeSMatt Arsenault ret <3 x float> %copysign 63a8376bbeSMatt Arsenault} 64a8376bbeSMatt Arsenault 65a8376bbeSMatt Arsenaultdefine <4 x float> @test_copysign_v4f32(<4 x float> %x, <4 x float> %y) { 66a8376bbeSMatt Arsenault; CHECK-LABEL: define <4 x float> @test_copysign_v4f32 67a8376bbeSMatt Arsenault; CHECK-SAME: (<4 x float> [[X:%.*]], <4 x float> [[Y:%.*]]) { 68c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <4 x float> @llvm.copysign.v4f32(<4 x float> [[X]], <4 x float> [[Y]]) 69a8376bbeSMatt Arsenault; CHECK-NEXT: ret <4 x float> [[COPYSIGN]] 70a8376bbeSMatt Arsenault; 71a8376bbeSMatt Arsenault %copysign = tail call <4 x float> @_Z8copysignDv4_fS_(<4 x float> %x, <4 x float> %y) 72a8376bbeSMatt Arsenault ret <4 x float> %copysign 73a8376bbeSMatt Arsenault} 74a8376bbeSMatt Arsenault 75a8376bbeSMatt Arsenaultdefine <8 x float> @test_copysign_v8f32(<8 x float> %x, <8 x float> %y) { 76a8376bbeSMatt Arsenault; CHECK-LABEL: define <8 x float> @test_copysign_v8f32 77a8376bbeSMatt Arsenault; CHECK-SAME: (<8 x float> [[X:%.*]], <8 x float> [[Y:%.*]]) { 78c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <8 x float> @llvm.copysign.v8f32(<8 x float> [[X]], <8 x float> [[Y]]) 79a8376bbeSMatt Arsenault; CHECK-NEXT: ret <8 x float> [[COPYSIGN]] 80a8376bbeSMatt Arsenault; 81a8376bbeSMatt Arsenault %copysign = tail call <8 x float> @_Z8copysignDv8_fS_(<8 x float> %x, <8 x float> %y) 82a8376bbeSMatt Arsenault ret <8 x float> %copysign 83a8376bbeSMatt Arsenault} 84a8376bbeSMatt Arsenault 85a8376bbeSMatt Arsenaultdefine <16 x float> @test_copysign_v16f32(<16 x float> %x, <16 x float> %y) { 86a8376bbeSMatt Arsenault; CHECK-LABEL: define <16 x float> @test_copysign_v16f32 87a8376bbeSMatt Arsenault; CHECK-SAME: (<16 x float> [[X:%.*]], <16 x float> [[Y:%.*]]) { 88c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <16 x float> @llvm.copysign.v16f32(<16 x float> [[X]], <16 x float> [[Y]]) 89a8376bbeSMatt Arsenault; CHECK-NEXT: ret <16 x float> [[COPYSIGN]] 90a8376bbeSMatt Arsenault; 91a8376bbeSMatt Arsenault %copysign = tail call <16 x float> @_Z8copysignDv16_fS_(<16 x float> %x, <16 x float> %y) 92a8376bbeSMatt Arsenault ret <16 x float> %copysign 93a8376bbeSMatt Arsenault} 94a8376bbeSMatt Arsenault 95a8376bbeSMatt Arsenaultdefine double @test_copysign_f64(double %x, double %y) { 96a8376bbeSMatt Arsenault; CHECK-LABEL: define double @test_copysign_f64 97a8376bbeSMatt Arsenault; CHECK-SAME: (double [[X:%.*]], double [[Y:%.*]]) { 98c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call double @llvm.copysign.f64(double [[X]], double [[Y]]) 99a8376bbeSMatt Arsenault; CHECK-NEXT: ret double [[COPYSIGN]] 100a8376bbeSMatt Arsenault; 101a8376bbeSMatt Arsenault %copysign = tail call double @_Z8copysigndd(double %x, double %y) 102a8376bbeSMatt Arsenault ret double %copysign 103a8376bbeSMatt Arsenault} 104a8376bbeSMatt Arsenault 105a8376bbeSMatt Arsenaultdefine <2 x double> @test_copysign_v2f64(<2 x double> %x, <2 x double> %y) { 106a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x double> @test_copysign_v2f64 107a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x double> [[X:%.*]], <2 x double> [[Y:%.*]]) { 108c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <2 x double> @llvm.copysign.v2f64(<2 x double> [[X]], <2 x double> [[Y]]) 109a8376bbeSMatt Arsenault; CHECK-NEXT: ret <2 x double> [[COPYSIGN]] 110a8376bbeSMatt Arsenault; 111a8376bbeSMatt Arsenault %copysign = tail call <2 x double> @_Z8copysignDv2_dS_(<2 x double> %x, <2 x double> %y) 112a8376bbeSMatt Arsenault ret <2 x double> %copysign 113a8376bbeSMatt Arsenault} 114a8376bbeSMatt Arsenault 115a8376bbeSMatt Arsenaultdefine <3 x double> @test_copysign_v3f64(<3 x double> %x, <3 x double> %y) { 116a8376bbeSMatt Arsenault; CHECK-LABEL: define <3 x double> @test_copysign_v3f64 117a8376bbeSMatt Arsenault; CHECK-SAME: (<3 x double> [[X:%.*]], <3 x double> [[Y:%.*]]) { 118c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <3 x double> @llvm.copysign.v3f64(<3 x double> [[X]], <3 x double> [[Y]]) 119a8376bbeSMatt Arsenault; CHECK-NEXT: ret <3 x double> [[COPYSIGN]] 120a8376bbeSMatt Arsenault; 121a8376bbeSMatt Arsenault %copysign = tail call <3 x double> @_Z8copysignDv3_dS_(<3 x double> %x, <3 x double> %y) 122a8376bbeSMatt Arsenault ret <3 x double> %copysign 123a8376bbeSMatt Arsenault} 124a8376bbeSMatt Arsenault 125a8376bbeSMatt Arsenaultdefine <4 x double> @test_copysign_v4f64(<4 x double> %x, <4 x double> %y) { 126a8376bbeSMatt Arsenault; CHECK-LABEL: define <4 x double> @test_copysign_v4f64 127a8376bbeSMatt Arsenault; CHECK-SAME: (<4 x double> [[X:%.*]], <4 x double> [[Y:%.*]]) { 128c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <4 x double> @llvm.copysign.v4f64(<4 x double> [[X]], <4 x double> [[Y]]) 129a8376bbeSMatt Arsenault; CHECK-NEXT: ret <4 x double> [[COPYSIGN]] 130a8376bbeSMatt Arsenault; 131a8376bbeSMatt Arsenault %copysign = tail call <4 x double> @_Z8copysignDv4_dS_(<4 x double> %x, <4 x double> %y) 132a8376bbeSMatt Arsenault ret <4 x double> %copysign 133a8376bbeSMatt Arsenault} 134a8376bbeSMatt Arsenault 135a8376bbeSMatt Arsenaultdefine <8 x double> @test_copysign_v8f64(<8 x double> %x, <8 x double> %y) { 136a8376bbeSMatt Arsenault; CHECK-LABEL: define <8 x double> @test_copysign_v8f64 137a8376bbeSMatt Arsenault; CHECK-SAME: (<8 x double> [[X:%.*]], <8 x double> [[Y:%.*]]) { 138c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <8 x double> @llvm.copysign.v8f64(<8 x double> [[X]], <8 x double> [[Y]]) 139a8376bbeSMatt Arsenault; CHECK-NEXT: ret <8 x double> [[COPYSIGN]] 140a8376bbeSMatt Arsenault; 141a8376bbeSMatt Arsenault %copysign = tail call <8 x double> @_Z8copysignDv8_dS_(<8 x double> %x, <8 x double> %y) 142a8376bbeSMatt Arsenault ret <8 x double> %copysign 143a8376bbeSMatt Arsenault} 144a8376bbeSMatt Arsenault 145a8376bbeSMatt Arsenaultdefine <16 x double> @test_copysign_v16f64(<16 x double> %x, <16 x double> %y) { 146a8376bbeSMatt Arsenault; CHECK-LABEL: define <16 x double> @test_copysign_v16f64 147a8376bbeSMatt Arsenault; CHECK-SAME: (<16 x double> [[X:%.*]], <16 x double> [[Y:%.*]]) { 148c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <16 x double> @llvm.copysign.v16f64(<16 x double> [[X]], <16 x double> [[Y]]) 149a8376bbeSMatt Arsenault; CHECK-NEXT: ret <16 x double> [[COPYSIGN]] 150a8376bbeSMatt Arsenault; 151a8376bbeSMatt Arsenault %copysign = tail call <16 x double> @_Z8copysignDv16_dS_(<16 x double> %x, <16 x double> %y) 152a8376bbeSMatt Arsenault ret <16 x double> %copysign 153a8376bbeSMatt Arsenault} 154a8376bbeSMatt Arsenault 155a8376bbeSMatt Arsenaultdefine half @test_copysign_f16(half %x, half %y) { 156a8376bbeSMatt Arsenault; CHECK-LABEL: define half @test_copysign_f16 157a8376bbeSMatt Arsenault; CHECK-SAME: (half [[X:%.*]], half [[Y:%.*]]) { 158c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call half @llvm.copysign.f16(half [[X]], half [[Y]]) 159a8376bbeSMatt Arsenault; CHECK-NEXT: ret half [[COPYSIGN]] 160a8376bbeSMatt Arsenault; 161a8376bbeSMatt Arsenault %copysign = tail call half @_Z8copysignDhDh(half %x, half %y) 162a8376bbeSMatt Arsenault ret half %copysign 163a8376bbeSMatt Arsenault} 164a8376bbeSMatt Arsenault 165a8376bbeSMatt Arsenaultdefine <2 x half> @test_copysign_v2f16(<2 x half> %x, <2 x half> %y) { 166a8376bbeSMatt Arsenault; CHECK-LABEL: define <2 x half> @test_copysign_v2f16 167a8376bbeSMatt Arsenault; CHECK-SAME: (<2 x half> [[X:%.*]], <2 x half> [[Y:%.*]]) { 168c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <2 x half> @llvm.copysign.v2f16(<2 x half> [[X]], <2 x half> [[Y]]) 169a8376bbeSMatt Arsenault; CHECK-NEXT: ret <2 x half> [[COPYSIGN]] 170a8376bbeSMatt Arsenault; 171a8376bbeSMatt Arsenault %copysign = tail call <2 x half> @_Z8copysignDv2_DhS_(<2 x half> %x, <2 x half> %y) 172a8376bbeSMatt Arsenault ret <2 x half> %copysign 173a8376bbeSMatt Arsenault} 174a8376bbeSMatt Arsenault 175a8376bbeSMatt Arsenaultdefine <3 x half> @test_copysign_v3f16(<3 x half> %x, <3 x half> %y) { 176a8376bbeSMatt Arsenault; CHECK-LABEL: define <3 x half> @test_copysign_v3f16 177a8376bbeSMatt Arsenault; CHECK-SAME: (<3 x half> [[X:%.*]], <3 x half> [[Y:%.*]]) { 178c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <3 x half> @llvm.copysign.v3f16(<3 x half> [[X]], <3 x half> [[Y]]) 179a8376bbeSMatt Arsenault; CHECK-NEXT: ret <3 x half> [[COPYSIGN]] 180a8376bbeSMatt Arsenault; 181a8376bbeSMatt Arsenault %copysign = tail call <3 x half> @_Z8copysignDv3_DhS_(<3 x half> %x, <3 x half> %y) 182a8376bbeSMatt Arsenault ret <3 x half> %copysign 183a8376bbeSMatt Arsenault} 184a8376bbeSMatt Arsenault 185a8376bbeSMatt Arsenaultdefine <4 x half> @test_copysign_v4f16(<4 x half> %x, <4 x half> %y) { 186a8376bbeSMatt Arsenault; CHECK-LABEL: define <4 x half> @test_copysign_v4f16 187a8376bbeSMatt Arsenault; CHECK-SAME: (<4 x half> [[X:%.*]], <4 x half> [[Y:%.*]]) { 188c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <4 x half> @llvm.copysign.v4f16(<4 x half> [[X]], <4 x half> [[Y]]) 189a8376bbeSMatt Arsenault; CHECK-NEXT: ret <4 x half> [[COPYSIGN]] 190a8376bbeSMatt Arsenault; 191a8376bbeSMatt Arsenault %copysign = tail call <4 x half> @_Z8copysignDv4_DhS_(<4 x half> %x, <4 x half> %y) 192a8376bbeSMatt Arsenault ret <4 x half> %copysign 193a8376bbeSMatt Arsenault} 194a8376bbeSMatt Arsenault 195a8376bbeSMatt Arsenaultdefine <8 x half> @test_copysign_v8f16(<8 x half> %x, <8 x half> %y) { 196a8376bbeSMatt Arsenault; CHECK-LABEL: define <8 x half> @test_copysign_v8f16 197a8376bbeSMatt Arsenault; CHECK-SAME: (<8 x half> [[X:%.*]], <8 x half> [[Y:%.*]]) { 198c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <8 x half> @llvm.copysign.v8f16(<8 x half> [[X]], <8 x half> [[Y]]) 199a8376bbeSMatt Arsenault; CHECK-NEXT: ret <8 x half> [[COPYSIGN]] 200a8376bbeSMatt Arsenault; 201a8376bbeSMatt Arsenault %copysign = tail call <8 x half> @_Z8copysignDv8_DhS_(<8 x half> %x, <8 x half> %y) 202a8376bbeSMatt Arsenault ret <8 x half> %copysign 203a8376bbeSMatt Arsenault} 204a8376bbeSMatt Arsenault 205a8376bbeSMatt Arsenaultdefine <16 x half> @test_copysign_v16f16(<16 x half> %x, <16 x half> %y) { 206a8376bbeSMatt Arsenault; CHECK-LABEL: define <16 x half> @test_copysign_v16f16 207a8376bbeSMatt Arsenault; CHECK-SAME: (<16 x half> [[X:%.*]], <16 x half> [[Y:%.*]]) { 208c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call <16 x half> @llvm.copysign.v16f16(<16 x half> [[X]], <16 x half> [[Y]]) 209a8376bbeSMatt Arsenault; CHECK-NEXT: ret <16 x half> [[COPYSIGN]] 210a8376bbeSMatt Arsenault; 211a8376bbeSMatt Arsenault %copysign = tail call <16 x half> @_Z8copysignDv16_DhS_(<16 x half> %x, <16 x half> %y) 212a8376bbeSMatt Arsenault ret <16 x half> %copysign 213a8376bbeSMatt Arsenault} 214a8376bbeSMatt Arsenault 215a8376bbeSMatt Arsenaultdefine float @test_copysign_f32_minsize(float %x, float %y) #0 { 216a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_copysign_f32_minsize 217a8376bbeSMatt Arsenault; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) #[[ATTR0:[0-9]+]] { 218c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call float @llvm.copysign.f32(float [[X]], float [[Y]]) 219a8376bbeSMatt Arsenault; CHECK-NEXT: ret float [[COPYSIGN]] 220a8376bbeSMatt Arsenault; 221a8376bbeSMatt Arsenault %copysign = tail call float @_Z8copysignff(float %x, float %y) 222a8376bbeSMatt Arsenault ret float %copysign 223a8376bbeSMatt Arsenault} 224a8376bbeSMatt Arsenault 225a8376bbeSMatt Arsenaultdefine float @test_copysign_f32_nnan_minsize(float %x, float %y) #0 { 226a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_copysign_f32_nnan_minsize 227a8376bbeSMatt Arsenault; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) #[[ATTR0]] { 228c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call nnan float @llvm.copysign.f32(float [[X]], float [[Y]]) 229a8376bbeSMatt Arsenault; CHECK-NEXT: ret float [[COPYSIGN]] 230a8376bbeSMatt Arsenault; 231a8376bbeSMatt Arsenault %copysign = tail call nnan float @_Z8copysignff(float %x, float %y) 232a8376bbeSMatt Arsenault ret float %copysign 233a8376bbeSMatt Arsenault} 234a8376bbeSMatt Arsenault 235a8376bbeSMatt Arsenaultdefine float @test_copysign_f32_noinline(float %x, float %y) { 236a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_copysign_f32_noinline 237a8376bbeSMatt Arsenault; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) { 238c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call float @_Z8copysignff(float [[X]], float [[Y]]) #[[ATTR3:[0-9]+]] 239a8376bbeSMatt Arsenault; CHECK-NEXT: ret float [[COPYSIGN]] 240a8376bbeSMatt Arsenault; 241a8376bbeSMatt Arsenault %copysign = tail call float @_Z8copysignff(float %x, float %y) #1 242a8376bbeSMatt Arsenault ret float %copysign 243a8376bbeSMatt Arsenault} 244a8376bbeSMatt Arsenault 245a8376bbeSMatt Arsenaultdefine float @test_copysign_f32_nnan_noinline(float %x, float %y) { 246a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_copysign_f32_nnan_noinline 247a8376bbeSMatt Arsenault; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) { 248c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call nnan float @_Z8copysignff(float [[X]], float [[Y]]) #[[ATTR3]] 249a8376bbeSMatt Arsenault; CHECK-NEXT: ret float [[COPYSIGN]] 250a8376bbeSMatt Arsenault; 251a8376bbeSMatt Arsenault %copysign = tail call nnan float @_Z8copysignff(float %x, float %y) #1 252a8376bbeSMatt Arsenault ret float %copysign 253a8376bbeSMatt Arsenault} 254a8376bbeSMatt Arsenault 255a8376bbeSMatt Arsenaultdefine float @test_copysign_f32_strictfp(float %x, float %y) #2 { 256a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_copysign_f32_strictfp 257a8376bbeSMatt Arsenault; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1:[0-9]+]] { 258c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call nnan nsz float @llvm.copysign.f32(float [[X]], float [[Y]]) #[[ATTR1]] 259a8376bbeSMatt Arsenault; CHECK-NEXT: ret float [[COPYSIGN]] 260a8376bbeSMatt Arsenault; 261a8376bbeSMatt Arsenault %copysign = tail call nsz nnan float @_Z8copysignff(float %x, float %y) #2 262a8376bbeSMatt Arsenault ret float %copysign 263a8376bbeSMatt Arsenault} 264a8376bbeSMatt Arsenault 265a8376bbeSMatt Arsenaultdefine float @test_copysign_f32_fast_nobuiltin(float %x, float %y) { 266a8376bbeSMatt Arsenault; CHECK-LABEL: define float @test_copysign_f32_fast_nobuiltin 267a8376bbeSMatt Arsenault; CHECK-SAME: (float [[X:%.*]], float [[Y:%.*]]) { 268c7876c55SMatt Arsenault; CHECK-NEXT: [[COPYSIGN:%.*]] = tail call fast float @_Z8copysignff(float [[X]], float [[Y]]) #[[ATTR4:[0-9]+]] 269a8376bbeSMatt Arsenault; CHECK-NEXT: ret float [[COPYSIGN]] 270a8376bbeSMatt Arsenault; 271a8376bbeSMatt Arsenault %copysign = tail call fast float @_Z8copysignff(float %x, float %y) #3 272a8376bbeSMatt Arsenault ret float %copysign 273a8376bbeSMatt Arsenault} 274a8376bbeSMatt Arsenault 275a8376bbeSMatt Arsenaultattributes #0 = { minsize } 276a8376bbeSMatt Arsenaultattributes #1 = { noinline } 277a8376bbeSMatt Arsenaultattributes #2 = { strictfp } 278a8376bbeSMatt Arsenaultattributes #3 = { nobuiltin } 279