| // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 6 |
| // REQUIRES: amdgpu-registered-target |
| |
| // RUN: %clang --target=%target -mcpu=%cpu %libclc_lib -cl-std=CL3.0 -O2 -fno-discard-value-names -emit-llvm -S -o - %s | FileCheck %s --check-prefix=%check_prefix |
| |
| // AMDGCN-LABEL: define hidden noundef signext i8 @test_char( |
| // AMDGCN-SAME: i8 noundef signext [[X:%.*]], i8 noundef signext [[Y:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { |
| // AMDGCN-NEXT: [[ENTRY:.*:]] |
| // AMDGCN-NEXT: [[TMP0:%.*]] = tail call noundef i8 @llvm.ssub.sat.i8(i8 [[X]], i8 [[Y]]) |
| // AMDGCN-NEXT: ret i8 [[TMP0]] |
| // |
| char test_char(char x, char y) { |
| return sub_sat(x, y); |
| } |
| |
| // AMDGCN-LABEL: define hidden noundef zeroext i8 @test_uchar( |
| // AMDGCN-SAME: i8 noundef zeroext [[X:%.*]], i8 noundef zeroext [[Y:%.*]]) local_unnamed_addr #[[ATTR0]] { |
| // AMDGCN-NEXT: [[ENTRY:.*:]] |
| // AMDGCN-NEXT: [[TMP0:%.*]] = tail call noundef i8 @llvm.usub.sat.i8(i8 [[X]], i8 [[Y]]) |
| // AMDGCN-NEXT: ret i8 [[TMP0]] |
| // |
| uchar test_uchar(uchar x, uchar y) { |
| return sub_sat(x, y); |
| } |
| |
| // AMDGCN-LABEL: define hidden noundef i64 @test_long( |
| // AMDGCN-SAME: i64 noundef [[X:%.*]], i64 noundef [[Y:%.*]]) local_unnamed_addr #[[ATTR0]] { |
| // AMDGCN-NEXT: [[ENTRY:.*:]] |
| // AMDGCN-NEXT: [[TMP0:%.*]] = tail call noundef i64 @llvm.ssub.sat.i64(i64 [[X]], i64 [[Y]]) |
| // AMDGCN-NEXT: ret i64 [[TMP0]] |
| // |
| long test_long(long x, long y) { |
| return sub_sat(x, y); |
| } |
| |
| // AMDGCN-LABEL: define hidden noundef i64 @test_ulong( |
| // AMDGCN-SAME: i64 noundef [[X:%.*]], i64 noundef [[Y:%.*]]) local_unnamed_addr #[[ATTR0]] { |
| // AMDGCN-NEXT: [[ENTRY:.*:]] |
| // AMDGCN-NEXT: [[TMP0:%.*]] = tail call noundef i64 @llvm.usub.sat.i64(i64 [[X]], i64 [[Y]]) |
| // AMDGCN-NEXT: ret i64 [[TMP0]] |
| // |
| ulong test_ulong(ulong x, ulong y) { |
| return sub_sat(x, y); |
| } |