| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 |
| ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT |
| |
| declare float @llvm.sin.f32(float) |
| declare float @llvm.cos.f32(float) |
| |
| define float @ret_sin(float %arg) { |
| ; CHECK-LABEL: define nofpclass(inf) float @ret_sin |
| ; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR1:[0-9]+]] { |
| ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf) float @llvm.sin.f32(float [[ARG]]) #[[ATTR2:[0-9]+]] |
| ; CHECK-NEXT: ret float [[CALL]] |
| ; |
| %call = call float @llvm.sin.f32(float %arg) |
| ret float %call |
| } |
| |
| define float @ret_cos(float %arg) { |
| ; CHECK-LABEL: define nofpclass(inf) float @ret_cos |
| ; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR1]] { |
| ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf) float @llvm.cos.f32(float [[ARG]]) #[[ATTR2]] |
| ; CHECK-NEXT: ret float [[CALL]] |
| ; |
| %call = call float @llvm.cos.f32(float %arg) |
| ret float %call |
| } |
| |
| define float @ret_sin_noinf(float nofpclass(inf) %arg) { |
| ; CHECK-LABEL: define nofpclass(inf) float @ret_sin_noinf |
| ; CHECK-SAME: (float nofpclass(inf) [[ARG:%.*]]) #[[ATTR1]] { |
| ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf) float @llvm.sin.f32(float [[ARG]]) #[[ATTR2]] |
| ; CHECK-NEXT: ret float [[CALL]] |
| ; |
| %call = call float @llvm.sin.f32(float %arg) |
| ret float %call |
| } |
| |
| define float @ret_cos_noinf(float nofpclass(inf) %arg) { |
| ; CHECK-LABEL: define nofpclass(inf) float @ret_cos_noinf |
| ; CHECK-SAME: (float nofpclass(inf) [[ARG:%.*]]) #[[ATTR1]] { |
| ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf) float @llvm.cos.f32(float [[ARG]]) #[[ATTR2]] |
| ; CHECK-NEXT: ret float [[CALL]] |
| ; |
| %call = call float @llvm.cos.f32(float %arg) |
| ret float %call |
| } |
| |
| define float @ret_sin_nonan(float nofpclass(nan) %arg) { |
| ; CHECK-LABEL: define nofpclass(inf) float @ret_sin_nonan |
| ; CHECK-SAME: (float nofpclass(nan) [[ARG:%.*]]) #[[ATTR1]] { |
| ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf) float @llvm.sin.f32(float [[ARG]]) #[[ATTR2]] |
| ; CHECK-NEXT: ret float [[CALL]] |
| ; |
| %call = call float @llvm.sin.f32(float %arg) |
| ret float %call |
| } |
| |
| define float @ret_cos_nonan(float nofpclass(nan) %arg) { |
| ; CHECK-LABEL: define nofpclass(inf) float @ret_cos_nonan |
| ; CHECK-SAME: (float nofpclass(nan) [[ARG:%.*]]) #[[ATTR1]] { |
| ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf) float @llvm.cos.f32(float [[ARG]]) #[[ATTR2]] |
| ; CHECK-NEXT: ret float [[CALL]] |
| ; |
| %call = call float @llvm.cos.f32(float %arg) |
| ret float %call |
| } |
| |
| define float @ret_sin_nonan_noinf(float nofpclass(nan inf) %arg) { |
| ; CHECK-LABEL: define nofpclass(nan inf) float @ret_sin_nonan_noinf |
| ; CHECK-SAME: (float nofpclass(nan inf) [[ARG:%.*]]) #[[ATTR1]] { |
| ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf) float @llvm.sin.f32(float [[ARG]]) #[[ATTR2]] |
| ; CHECK-NEXT: ret float [[CALL]] |
| ; |
| %call = call float @llvm.sin.f32(float %arg) |
| ret float %call |
| } |
| |
| define float @ret_cos_nonan_noinf(float nofpclass(nan inf) %arg) { |
| ; CHECK-LABEL: define nofpclass(nan inf) float @ret_cos_nonan_noinf |
| ; CHECK-SAME: (float nofpclass(nan inf) [[ARG:%.*]]) #[[ATTR1]] { |
| ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(nan inf) float @llvm.cos.f32(float [[ARG]]) #[[ATTR2]] |
| ; CHECK-NEXT: ret float [[CALL]] |
| ; |
| %call = call float @llvm.cos.f32(float %arg) |
| ret float %call |
| } |
| |
| |
| define float @ret_sin_noqnan(float nofpclass(qnan) %arg) { |
| ; CHECK-LABEL: define nofpclass(inf) float @ret_sin_noqnan |
| ; CHECK-SAME: (float nofpclass(qnan) [[ARG:%.*]]) #[[ATTR1]] { |
| ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf) float @llvm.sin.f32(float [[ARG]]) #[[ATTR2]] |
| ; CHECK-NEXT: ret float [[CALL]] |
| ; |
| %call = call float @llvm.sin.f32(float %arg) |
| ret float %call |
| } |
| |
| define float @ret_cos_noqnan(float nofpclass(qnan) %arg) { |
| ; CHECK-LABEL: define nofpclass(inf) float @ret_cos_noqnan |
| ; CHECK-SAME: (float nofpclass(qnan) [[ARG:%.*]]) #[[ATTR1]] { |
| ; CHECK-NEXT: [[CALL:%.*]] = call nofpclass(inf) float @llvm.cos.f32(float [[ARG]]) #[[ATTR2]] |
| ; CHECK-NEXT: ret float [[CALL]] |
| ; |
| %call = call float @llvm.cos.f32(float %arg) |
| ret float %call |
| } |
| |
| ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: |
| ; TUNIT: {{.*}} |