brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.8 KiB · a5db8f5 Raw
428 lines · plain
1; RUN: llc -mtriple=spirv-unknown-vulkan-compute -O0 %s -o - | FileCheck %s2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-vulkan-compute %s -o - -filetype=obj | spirv-val %}3 4;5; int process() {6;   int a = 0;7;   int b = 1;8;   int val = 0;9;10;   for (int i = 0; a && b; ++i) {11;     val += 1;12;   }13;14;   for (int i = 0; a || b; ++i) {15;     val += 1;16;     b = 0;17;   }18;19;   b = 1;20;   for (int i = 0; a && ((a || b) && b); ++i) {21;     val += 4;22;     b = 0;23;   }24;25;   b = 1;26;   for (int i = 0; a ? a : b; ++i) {27;     val += 8;28;     b = 0;29;   }30;31;   int x = 0;32;   int y = 0;33;   for (int i = 0; x + (x && y); ++i) {34;     val += 16;35;   }36;37;   return val;38; }39;40; [numthreads(1, 1, 1)]41; void main() {42;   process();43; }44 45; CHECK:     %[[#process:]] = OpFunction %[[#uint:]] DontInline %[[#]]46; CHECK:        %[[#bb86:]] = OpLabel47; CHECK:                      OpBranch %[[#bb87:]]48  ; CHECK:         %[[#bb87]] = OpLabel49  ; CHECK:                      OpLoopMerge %[[#bb89:]] %[[#bb90:]] None50  ; CHECK:                      OpBranch %[[#bb91:]]51  ; CHECK:         %[[#bb91]] = OpLabel52  ; CHECK:                      OpSelectionMerge %[[#bb92:]] None53  ; CHECK:                      OpBranchConditional %[[#]] %[[#bb93:]] %[[#bb94:]]54    ; CHECK:         %[[#bb94]] = OpLabel55    ; CHECK:                      OpBranch %[[#bb92]]56 57    ; CHECK:         %[[#bb93]] = OpLabel58    ; CHECK:                      OpBranch %[[#bb92]]59    ; CHECK:         %[[#bb92]] = OpLabel60    ; CHECK:                      OpBranchConditional %[[#]] %[[#bb96:]] %[[#bb89]]61      ; CHECK:         %[[#bb89]] = OpLabel62      ; CHECK:                      OpBranch %[[#bb97:]]63      ; CHECK:         %[[#bb97]] = OpLabel64      ; CHECK:                      OpLoopMerge %[[#bb99:]] %[[#bb100:]] None65      ; CHECK:                      OpBranch %[[#bb101:]]66      ; CHECK:        %[[#bb101]] = OpLabel67      ; CHECK:                      OpSelectionMerge %[[#bb102:]] None68      ; CHECK:                      OpBranchConditional %[[#]] %[[#bb103:]] %[[#bb104:]]69        ; CHECK:        %[[#bb104]] = OpLabel70        ; CHECK:                      OpBranch %[[#bb102]]71 72        ; CHECK:        %[[#bb103]] = OpLabel73        ; CHECK:                      OpBranch %[[#bb102]]74        ; CHECK:        %[[#bb102]] = OpLabel75        ; CHECK:                      OpBranchConditional %[[#]] %[[#bb106:]] %[[#bb99]]76          ; CHECK:         %[[#bb99]] = OpLabel77          ; CHECK:                      OpBranch %[[#bb107:]]78          ; CHECK:        %[[#bb107]] = OpLabel79          ; CHECK:                      OpLoopMerge %[[#bb109:]] %[[#bb110:]] None80          ; CHECK:                      OpBranch %[[#bb111:]]81          ; CHECK:        %[[#bb111]] = OpLabel82          ; CHECK:                      OpSelectionMerge %[[#bb112:]] None83          ; CHECK:                      OpBranchConditional %[[#]] %[[#bb113:]] %[[#bb114:]]84            ; CHECK:        %[[#bb114]] = OpLabel85            ; CHECK:                      OpBranch %[[#bb112]]86 87            ; CHECK:        %[[#bb113]] = OpLabel88            ; CHECK:                      OpSelectionMerge %[[#bb116:]] None89            ; CHECK:                      OpBranchConditional %[[#]] %[[#bb117:]] %[[#bb116]]90              ; CHECK:        %[[#bb117]] = OpLabel91              ; CHECK:                      OpSelectionMerge %[[#bb118:]] None92              ; CHECK:                      OpBranchConditional %[[#]] %[[#bb119:]] %[[#bb120:]]93                ; CHECK:        %[[#bb120]] = OpLabel94                ; CHECK:                      OpSelectionMerge %[[#bb122:]] None95                ; CHECK:                      OpBranchConditional %[[#]] %[[#bb122]] %[[#bb123:]]96                  ; CHECK:        %[[#bb123]] = OpLabel97                  ; CHECK:                      OpBranch %[[#bb122]]98                  ; CHECK:        %[[#bb122]] = OpLabel99                  ; CHECK:                      OpBranchConditional %[[#]] %[[#bb126:]] %[[#bb118]]100                    ; CHECK:        %[[#bb126]] = OpLabel101                    ; CHECK:                      OpBranch %[[#bb118]]102 103                ; CHECK:        %[[#bb119]] = OpLabel104                ; CHECK:                      OpBranch %[[#bb118]]105                ; CHECK:        %[[#bb118]] = OpLabel106                ; CHECK:                      OpBranchConditional %[[#]] %[[#bb116]] %[[#bb129:]]107                  ; CHECK:        %[[#bb129]] = OpLabel108                  ; CHECK:                      OpBranch %[[#bb116]]109                  ; CHECK:        %[[#bb116]] = OpLabel110                  ; CHECK:                      OpBranchConditional %[[#]] %[[#bb112]] %[[#bb133:]]111                    ; CHECK:        %[[#bb133]] = OpLabel112                    ; CHECK:                      OpBranch %[[#bb112]]113                    ; CHECK:        %[[#bb112]] = OpLabel114                    ; CHECK:                      OpSelectionMerge %[[#bb136:]] None115                    ; CHECK:                      OpBranchConditional %[[#]] %[[#bb136]] %[[#bb137:]]116                    ; CHECK:        %[[#bb137]] = OpLabel117                    ; CHECK-NEXT:                 OpUnreachable118 119                    ; CHECK:        %[[#bb136]] = OpLabel120                    ; CHECK:                      OpBranchConditional %[[#]] %[[#bb138:]] %[[#bb109]]121                      ; CHECK:        %[[#bb109]] = OpLabel122                      ; CHECK:                      OpBranch %[[#bb139:]]123                      ; CHECK:        %[[#bb139]] = OpLabel124                      ; CHECK:                      OpLoopMerge %[[#bb141:]] %[[#bb142:]] None125                      ; CHECK:                      OpBranch %[[#bb143:]]126                      ; CHECK:        %[[#bb143]] = OpLabel127                      ; CHECK:                      OpSelectionMerge %[[#bb144:]] None128                      ; CHECK:                      OpBranchConditional %[[#]] %[[#bb145:]] %[[#bb146:]]129                        ; CHECK:        %[[#bb146]] = OpLabel130                        ; CHECK:                      OpBranch %[[#bb144]]131 132                        ; CHECK:        %[[#bb145]] = OpLabel133                        ; CHECK:                      OpBranch %[[#bb144]]134                      ; CHECK:        %[[#bb144]] = OpLabel135                      ; CHECK:                      OpBranchConditional %[[#]] %[[#bb149:]] %[[#bb141]]136                        ; CHECK:        %[[#bb141]] = OpLabel137                        ; CHECK:                      OpBranch %[[#bb150:]]138                        ; CHECK:        %[[#bb150]] = OpLabel139                        ; CHECK:                      OpLoopMerge %[[#bb153:]] %[[#bb154:]] None140                        ; CHECK:                      OpBranch %[[#bb155:]]141                        ; CHECK:        %[[#bb155]] = OpLabel142                        ; CHECK:                      OpSelectionMerge %[[#bb156:]] None143                        ; CHECK:                      OpBranchConditional %[[#]] %[[#bb157:]] %[[#bb158:]]144                          ; CHECK:        %[[#bb158]] = OpLabel145                          ; CHECK:                      OpBranch %[[#bb156]]146 147                          ; CHECK:        %[[#bb157]] = OpLabel148                          ; CHECK:                      OpBranch %[[#bb156]]149                        ; CHECK:        %[[#bb156]] = OpLabel150                        ; CHECK:                      OpBranchConditional %[[#]] %[[#bb160:]] %[[#bb153]]151                          ; CHECK:        %[[#bb153]] = OpLabel152                          ; CHECK:                      OpReturnValue %[[#]]153 154                          ; CHECK:        %[[#bb160]] = OpLabel155                          ; CHECK:                      OpBranch %[[#bb154]]156                          ; CHECK:        %[[#bb154]] = OpLabel157                          ; CHECK:                      OpBranch %[[#bb150]]158                        ; CHECK:        %[[#bb149]] = OpLabel159                        ; CHECK:                      OpBranch %[[#bb142]]160                        ; CHECK:        %[[#bb142]] = OpLabel161                        ; CHECK:                      OpBranch %[[#bb139]]162                      ; CHECK:        %[[#bb138]] = OpLabel163                      ; CHECK:                      OpBranch %[[#bb110]]164                      ; CHECK:        %[[#bb110]] = OpLabel165                      ; CHECK:                      OpBranch %[[#bb107]]166          ; CHECK:        %[[#bb106]] = OpLabel167          ; CHECK:                      OpBranch %[[#bb100]]168          ; CHECK:        %[[#bb100]] = OpLabel169          ; CHECK:                      OpBranch %[[#bb97]]170      ; CHECK:         %[[#bb96]] = OpLabel171      ; CHECK:                      OpBranch %[[#bb90]]172      ; CHECK:         %[[#bb90]] = OpLabel173      ; CHECK:                      OpBranch %[[#bb87]]174; CHECK:                      OpFunctionEnd175 176; CHECK:   %[[#func_main:]] = OpFunction %[[#void:]] DontInline %[[#]]177; CHECK:       %[[#bb172:]] = OpLabel178; CHECK:                      OpReturn179; CHECK:                      OpFunctionEnd180 181; CHECK: %[[#func_main_1:]] = OpFunction %[[#void]] None %[[#]]182; CHECK:       %[[#bb173:]] = OpLabel183; CHECK:                      OpReturn184; CHECK:                      OpFunctionEnd185 186target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-G1"187target triple = "spirv-unknown-vulkan1.3-compute"188 189; Function Attrs: convergent noinline norecurse nounwind optnone190define spir_func noundef i32 @_Z7processv() #0 {191entry:192  %0 = call token @llvm.experimental.convergence.entry()193  %a = alloca i32, align 4194  %b = alloca i32, align 4195  %val = alloca i32, align 4196  %i = alloca i32, align 4197  %i2 = alloca i32, align 4198  %i11 = alloca i32, align 4199  %i26 = alloca i32, align 4200  %x = alloca i32, align 4201  %y = alloca i32, align 4202  %i35 = alloca i32, align 4203  store i32 0, ptr %a, align 4204  store i32 1, ptr %b, align 4205  store i32 0, ptr %val, align 4206  store i32 0, ptr %i, align 4207  br label %for.cond208 209for.cond:                                         ; preds = %for.inc, %entry210  %1 = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %0) ]211  %2 = load i32, ptr %a, align 4212  %tobool = icmp ne i32 %2, 0213  br i1 %tobool, label %land.rhs, label %land.end214 215land.rhs:                                         ; preds = %for.cond216  %3 = load i32, ptr %b, align 4217  %tobool1 = icmp ne i32 %3, 0218  br label %land.end219 220land.end:                                         ; preds = %land.rhs, %for.cond221  %4 = phi i1 [ false, %for.cond ], [ %tobool1, %land.rhs ]222  br i1 %4, label %for.body, label %for.end223 224for.body:                                         ; preds = %land.end225  %5 = load i32, ptr %val, align 4226  %add = add nsw i32 %5, 1227  store i32 %add, ptr %val, align 4228  br label %for.inc229 230for.inc:                                          ; preds = %for.body231  %6 = load i32, ptr %i, align 4232  %inc = add nsw i32 %6, 1233  store i32 %inc, ptr %i, align 4234  br label %for.cond235 236for.end:                                          ; preds = %land.end237  store i32 0, ptr %i2, align 4238  br label %for.cond3239 240for.cond3:                                        ; preds = %for.inc8, %for.end241  %7 = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %0) ]242  %8 = load i32, ptr %a, align 4243  %tobool4 = icmp ne i32 %8, 0244  br i1 %tobool4, label %lor.end, label %lor.rhs245 246lor.rhs:                                          ; preds = %for.cond3247  %9 = load i32, ptr %b, align 4248  %tobool5 = icmp ne i32 %9, 0249  br label %lor.end250 251lor.end:                                          ; preds = %lor.rhs, %for.cond3252  %10 = phi i1 [ true, %for.cond3 ], [ %tobool5, %lor.rhs ]253  br i1 %10, label %for.body6, label %for.end10254 255for.body6:                                        ; preds = %lor.end256  %11 = load i32, ptr %val, align 4257  %add7 = add nsw i32 %11, 1258  store i32 %add7, ptr %val, align 4259  store i32 0, ptr %b, align 4260  br label %for.inc8261 262for.inc8:                                         ; preds = %for.body6263  %12 = load i32, ptr %i2, align 4264  %inc9 = add nsw i32 %12, 1265  store i32 %inc9, ptr %i2, align 4266  br label %for.cond3267 268for.end10:                                        ; preds = %lor.end269  store i32 1, ptr %b, align 4270  store i32 0, ptr %i11, align 4271  br label %for.cond12272 273for.cond12:                                       ; preds = %for.inc23, %for.end10274  %13 = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %0) ]275  %14 = load i32, ptr %a, align 4276  %tobool13 = icmp ne i32 %14, 0277  br i1 %tobool13, label %land.rhs14, label %land.end20278 279land.rhs14:                                       ; preds = %for.cond12280  %15 = load i32, ptr %a, align 4281  %tobool15 = icmp ne i32 %15, 0282  br i1 %tobool15, label %land.rhs17, label %lor.lhs.false283 284lor.lhs.false:                                    ; preds = %land.rhs14285  %16 = load i32, ptr %b, align 4286  %tobool16 = icmp ne i32 %16, 0287  br i1 %tobool16, label %land.rhs17, label %land.end19288 289land.rhs17:                                       ; preds = %lor.lhs.false, %land.rhs14290  %17 = load i32, ptr %b, align 4291  %tobool18 = icmp ne i32 %17, 0292  br label %land.end19293 294land.end19:                                       ; preds = %land.rhs17, %lor.lhs.false295  %18 = phi i1 [ false, %lor.lhs.false ], [ %tobool18, %land.rhs17 ]296  br label %land.end20297 298land.end20:                                       ; preds = %land.end19, %for.cond12299  %19 = phi i1 [ false, %for.cond12 ], [ %18, %land.end19 ]300  br i1 %19, label %for.body21, label %for.end25301 302for.body21:                                       ; preds = %land.end20303  %20 = load i32, ptr %val, align 4304  %add22 = add nsw i32 %20, 4305  store i32 %add22, ptr %val, align 4306  store i32 0, ptr %b, align 4307  br label %for.inc23308 309for.inc23:                                        ; preds = %for.body21310  %21 = load i32, ptr %i11, align 4311  %inc24 = add nsw i32 %21, 1312  store i32 %inc24, ptr %i11, align 4313  br label %for.cond12314 315for.end25:                                        ; preds = %land.end20316  store i32 1, ptr %b, align 4317  store i32 0, ptr %i26, align 4318  br label %for.cond27319 320for.cond27:                                       ; preds = %for.inc32, %for.end25321  %22 = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %0) ]322  %23 = load i32, ptr %a, align 4323  %tobool28 = icmp ne i32 %23, 0324  br i1 %tobool28, label %cond.true, label %cond.false325 326cond.true:                                        ; preds = %for.cond27327  %24 = load i32, ptr %a, align 4328  br label %cond.end329 330cond.false:                                       ; preds = %for.cond27331  %25 = load i32, ptr %b, align 4332  br label %cond.end333 334cond.end:                                         ; preds = %cond.false, %cond.true335  %cond = phi i32 [ %24, %cond.true ], [ %25, %cond.false ]336  %tobool29 = icmp ne i32 %cond, 0337  br i1 %tobool29, label %for.body30, label %for.end34338 339for.body30:                                       ; preds = %cond.end340  %26 = load i32, ptr %val, align 4341  %add31 = add nsw i32 %26, 8342  store i32 %add31, ptr %val, align 4343  store i32 0, ptr %b, align 4344  br label %for.inc32345 346for.inc32:                                        ; preds = %for.body30347  %27 = load i32, ptr %i26, align 4348  %inc33 = add nsw i32 %27, 1349  store i32 %inc33, ptr %i26, align 4350  br label %for.cond27351 352for.end34:                                        ; preds = %cond.end353  store i32 0, ptr %x, align 4354  store i32 0, ptr %y, align 4355  store i32 0, ptr %i35, align 4356  br label %for.cond36357 358for.cond36:                                       ; preds = %for.inc45, %for.end34359  %28 = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %0) ]360  %29 = load i32, ptr %x, align 4361  %30 = load i32, ptr %x, align 4362  %tobool37 = icmp ne i32 %30, 0363  br i1 %tobool37, label %land.rhs38, label %land.end40364 365land.rhs38:                                       ; preds = %for.cond36366  %31 = load i32, ptr %y, align 4367  %tobool39 = icmp ne i32 %31, 0368  br label %land.end40369 370land.end40:                                       ; preds = %land.rhs38, %for.cond36371  %32 = phi i1 [ false, %for.cond36 ], [ %tobool39, %land.rhs38 ]372  %conv = zext i1 %32 to i32373  %add41 = add nsw i32 %29, %conv374  %tobool42 = icmp ne i32 %add41, 0375  br i1 %tobool42, label %for.body43, label %for.end47376 377for.body43:                                       ; preds = %land.end40378  %33 = load i32, ptr %val, align 4379  %add44 = add nsw i32 %33, 16380  store i32 %add44, ptr %val, align 4381  br label %for.inc45382 383for.inc45:                                        ; preds = %for.body43384  %34 = load i32, ptr %i35, align 4385  %inc46 = add nsw i32 %34, 1386  store i32 %inc46, ptr %i35, align 4387  br label %for.cond36388 389for.end47:                                        ; preds = %land.end40390  %35 = load i32, ptr %val, align 4391  ret i32 %35392}393 394; Function Attrs: convergent nocallback nofree nosync nounwind willreturn memory(none)395declare token @llvm.experimental.convergence.entry() #1396 397; Function Attrs: convergent nocallback nofree nosync nounwind willreturn memory(none)398declare token @llvm.experimental.convergence.loop() #1399 400; Function Attrs: convergent noinline norecurse nounwind optnone401define internal spir_func void @main() #0 {402entry:403  %0 = call token @llvm.experimental.convergence.entry()404  %call1 = call spir_func noundef i32 @_Z7processv() #3 [ "convergencectrl"(token %0) ]405  ret void406}407 408; Function Attrs: convergent norecurse409define void @main.1() #2 {410entry:411  call void @main()412  ret void413}414 415attributes #0 = { convergent noinline norecurse nounwind optnone "frame-pointer"="all" "no-trapping-math"="true" "stack-protector-buffer-size"="8" }416attributes #1 = { convergent nocallback nofree nosync nounwind willreturn memory(none) }417attributes #2 = { convergent norecurse "frame-pointer"="all" "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" "no-trapping-math"="true" "stack-protector-buffer-size"="8" }418attributes #3 = { convergent }419 420!llvm.module.flags = !{!0, !1, !2}421 422 423!0 = !{i32 1, !"wchar_size", i32 4}424!1 = !{i32 4, !"dx.disable_optimizations", i32 1}425!2 = !{i32 7, !"frame-pointer", i32 2}426 427 428