38 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -mtriple=amdgcn-amd-amdhsa -passes=instcombine -S | FileCheck %s3 4; Optimize the intrinsic away if the argument is uniform.5define i32 @test_constant() {6; CHECK-LABEL: @test_constant(7; CHECK-NEXT: ret i32 998;9 %call = call i32 @llvm.amdgcn.permlane64.i32(i32 99)10 ret i32 %call11}12 13define i32 @test_bitcast_f32_to_i32_permlane64(float %val) {14; CHECK-LABEL: @test_bitcast_f32_to_i32_permlane64(15; CHECK-NEXT: [[VAL:%.*]] = call float @llvm.amdgcn.permlane64.f32(float [[VAL1:%.*]])16; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i3217; CHECK-NEXT: ret i32 [[BITCAST]]18;19 %bitcast = bitcast float %val to i3220 %result = call i32 @llvm.amdgcn.permlane64.i32(i32 %bitcast)21 ret i32 %result22}23 24define i32 @test_bitcast_f32_to_i32_permlane64_convergencetokenn(float %val) convergent {25; CHECK-LABEL: @test_bitcast_f32_to_i32_permlane64_convergencetokenn(26; CHECK-NEXT: [[T:%.*]] = call token @llvm.experimental.convergence.entry()27; CHECK-NEXT: [[VAL:%.*]] = call float @llvm.amdgcn.permlane64.f32(float [[VAL1:%.*]]) [ "convergencectrl"(token [[T]]) ]28; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i3229; CHECK-NEXT: ret i32 [[BITCAST]]30;31 %t = call token @llvm.experimental.convergence.entry()32 %bitcast = bitcast float %val to i3233 %result = call i32 @llvm.amdgcn.permlane64.i32(i32 %bitcast) [ "convergencectrl"(token %t) ]34 ret i32 %result35}36 37declare i32 @llvm.amdgcn.permlane64.i32(i32)38