brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · 9090d60 Raw
108 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals2; RUN: opt -S -mtriple=amdgcn-amd- -passes=amdgpu-attributor %s | FileCheck %s3 4; Test to ensure recursive functions exhibit proper behaviour5; Test to generate fibonacci numbers6 7define i32 @fib(i32 %n) #0 {8; CHECK-LABEL: define {{[^@]+}}@fib9; CHECK-SAME: (i32 [[N:%.*]]) #[[ATTR0:[0-9]+]] {10; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[N]], 011; CHECK-NEXT:    br i1 [[CMP1]], label [[EXIT:%.*]], label [[CONT1:%.*]]12; CHECK:       cont1:13; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i32 [[N]], 114; CHECK-NEXT:    br i1 [[CMP2]], label [[EXIT]], label [[CONT2:%.*]]15; CHECK:       cont2:16; CHECK-NEXT:    [[NM1:%.*]] = sub i32 [[N]], 117; CHECK-NEXT:    [[FIBM1:%.*]] = call i32 @fib(i32 [[NM1]])18; CHECK-NEXT:    [[NM2:%.*]] = sub i32 [[N]], 219; CHECK-NEXT:    [[FIBM2:%.*]] = call i32 @fib(i32 [[NM2]])20; CHECK-NEXT:    [[RETVAL:%.*]] = add i32 [[FIBM1]], [[FIBM2]]21; CHECK-NEXT:    ret i32 [[RETVAL]]22; CHECK:       exit:23; CHECK-NEXT:    ret i32 124;25  %cmp1 = icmp eq i32 %n, 026  br i1 %cmp1, label %exit, label %cont127 28cont1:29  %cmp2 = icmp eq i32 %n, 130  br i1 %cmp2, label %exit, label %cont231 32cont2:33  %nm1 = sub i32 %n, 134  %fibm1 = call i32 @fib(i32 %nm1)35  %nm2 = sub i32 %n, 236  %fibm2 = call i32 @fib(i32 %nm2)37  %retval = add i32 %fibm1, %fibm238 39  ret i32 %retval40 41exit:42  ret i32 143}44 45define internal i32 @fib_internal(i32 %n) #0 {46; CHECK-LABEL: define {{[^@]+}}@fib_internal47; CHECK-SAME: (i32 [[N:%.*]]) #[[ATTR1:[0-9]+]] {48; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[N]], 049; CHECK-NEXT:    br i1 [[CMP1]], label [[EXIT:%.*]], label [[CONT1:%.*]]50; CHECK:       cont1:51; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i32 [[N]], 152; CHECK-NEXT:    br i1 [[CMP2]], label [[EXIT]], label [[CONT2:%.*]]53; CHECK:       cont2:54; CHECK-NEXT:    [[NM1:%.*]] = sub i32 [[N]], 155; CHECK-NEXT:    [[FIBM1:%.*]] = call i32 @fib_internal(i32 [[NM1]])56; CHECK-NEXT:    [[NM2:%.*]] = sub i32 [[N]], 257; CHECK-NEXT:    [[FIBM2:%.*]] = call i32 @fib_internal(i32 [[NM2]])58; CHECK-NEXT:    [[RETVAL:%.*]] = add i32 [[FIBM1]], [[FIBM2]]59; CHECK-NEXT:    ret i32 [[RETVAL]]60; CHECK:       exit:61; CHECK-NEXT:    ret i32 162;63  %cmp1 = icmp eq i32 %n, 064  br i1 %cmp1, label %exit, label %cont165 66cont1:67  %cmp2 = icmp eq i32 %n, 168  br i1 %cmp2, label %exit, label %cont269 70cont2:71  %nm1 = sub i32 %n, 172  %fibm1 = call i32 @fib_internal(i32 %nm1)73  %nm2 = sub i32 %n, 274  %fibm2 = call i32 @fib_internal(i32 %nm2)75  %retval = add i32 %fibm1, %fibm276 77  ret i32 %retval78 79exit:80  ret i32 181}82 83define amdgpu_kernel void @kernel(ptr addrspace(1) %m) #1 {84; CHECK-LABEL: define {{[^@]+}}@kernel85; CHECK-SAME: (ptr addrspace(1) [[M:%.*]]) #[[ATTR2:[0-9]+]] {86; CHECK-NEXT:    [[R:%.*]] = call i32 @fib(i32 5)87; CHECK-NEXT:    [[R2:%.*]] = call i32 @fib_internal(i32 5)88; CHECK-NEXT:    store i32 [[R]], ptr addrspace(1) [[M]], align 489; CHECK-NEXT:    store i32 [[R2]], ptr addrspace(1) [[M]], align 490; CHECK-NEXT:    ret void91;92  %r = call i32 @fib(i32 5)93  %r2 = call i32 @fib_internal(i32 5)94 95  store i32 %r, ptr addrspace(1) %m96  store i32 %r2, ptr addrspace(1) %m97  ret void98}99 100; nounwind and readnone are added to match attributor results.101attributes #0 = { nounwind readnone }102attributes #1 = { "uniform-work-group-size"="true" }103;.104; CHECK: attributes #[[ATTR0]] = { nounwind memory(none) "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" }105; CHECK: attributes #[[ATTR1]] = { nounwind memory(none) "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="true" }106; CHECK: attributes #[[ATTR2]] = { "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="true" }107;.108