| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 |
| ; RUN: opt -S -mtriple=amdgcn-- -passes=amdgpu-usenative -amdgpu-use-native=all < %s | FileCheck %s |
| |
| ; Verify nobuiltin is respected on a defined function. native_cos is |
| ; marked nobuiltin, but native_sin is not. |
| |
| define float @_Z10native_sinf(float %x) { |
| ; CHECK-LABEL: define float @_Z10native_sinf |
| ; CHECK-SAME: (float [[X:%.*]]) { |
| ; CHECK-NEXT: [[RESULT:%.*]] = call float asm " |
| ; CHECK-NEXT: ret float [[RESULT]] |
| ; |
| %result = call float asm "; $0 = native_sin($1)", "=v,v"(float %x) |
| ret float %result |
| } |
| |
| define float @_Z10native_cosf(float %x) nobuiltin { |
| ; CHECK-LABEL: define float @_Z10native_cosf |
| ; CHECK-SAME: (float [[X:%.*]]) #[[ATTR0:[0-9]+]] { |
| ; CHECK-NEXT: [[RESULT:%.*]] = call float asm " |
| ; CHECK-NEXT: ret float [[RESULT]] |
| ; |
| %result = call float asm "; $0 = native_cos($1)", "=v,v"(float %x) |
| ret float %result |
| } |
| |
| define float @_Z3sinf(float %x) { |
| ; CHECK-LABEL: define float @_Z3sinf |
| ; CHECK-SAME: (float [[X:%.*]]) { |
| ; CHECK-NEXT: [[RESULT:%.*]] = call float asm " |
| ; CHECK-NEXT: ret float [[RESULT]] |
| ; |
| %result = call float asm "; $0 = sin($1)", "=v,v"(float %x) |
| ret float %result |
| } |
| |
| define float @_Z3cosf(float %x) { |
| ; CHECK-LABEL: define float @_Z3cosf |
| ; CHECK-SAME: (float [[X:%.*]]) { |
| ; CHECK-NEXT: [[RESULT:%.*]] = call float asm " |
| ; CHECK-NEXT: ret float [[RESULT]] |
| ; |
| %result = call float asm "; $0 = cos($1)", "=v,v"(float %x) |
| ret float %result |
| } |
| |
| define float @call_cos(float %x) { |
| ; CHECK-LABEL: define float @call_cos |
| ; CHECK-SAME: (float [[X:%.*]]) { |
| ; CHECK-NEXT: [[RESULT:%.*]] = call float @_Z3cosf(float [[X]]) |
| ; CHECK-NEXT: ret float [[RESULT]] |
| ; |
| %result = call float @_Z3cosf(float %x) |
| ret float %result |
| } |
| |
| define float @call_sin(float %x) { |
| ; CHECK-LABEL: define float @call_sin |
| ; CHECK-SAME: (float [[X:%.*]]) { |
| ; CHECK-NEXT: [[RESULT:%.*]] = call float @_Z10native_sinf(float [[X]]) |
| ; CHECK-NEXT: ret float [[RESULT]] |
| ; |
| %result = call float @_Z3sinf(float %x) |
| ret float %result |
| } |