| ; RUN: opt %loadPolly -polly-codegen-ppcg -polly-acc-dump-code \ |
| ; RUN: -disable-output < %s | \ |
| ; RUN: FileCheck -check-prefix=CODE %s |
| |
| ; RUN: opt %loadPolly -polly-codegen-ppcg -S < %s | \ |
| ; RUN: FileCheck %s -check-prefix=IR |
| |
| ; REQUIRES: pollyacc |
| |
| ; This test case ensures that we properly sign-extend the types we are using. |
| |
| ; CODE: if (arg >= 1 && arg1 == 0) { |
| ; CODE: cudaCheckReturn(cudaMemcpy(dev_MemRef_arg3, MemRef_arg3, (arg) * sizeof(double), cudaMemcpyHostToDevice)); |
| ; CODE-NEXT: { |
| ; CODE-NEXT: dim3 k0_dimBlock(32); |
| ; CODE-NEXT: dim3 k0_dimGrid(arg >= 1048545 ? 32768 : (arg + 31) / 32); |
| ; CODE-NEXT: kernel0 <<<k0_dimGrid, k0_dimBlock>>> (dev_MemRef_arg3, dev_MemRef_arg2, arg, arg1); |
| ; CODE-NEXT: cudaCheckKernel(); |
| ; CODE-NEXT: } |
| |
| ; CODE: cudaCheckReturn(cudaMemcpy(MemRef_arg2, dev_MemRef_arg2, (arg) * sizeof(double), cudaMemcpyDeviceToHost)); |
| ; CODE-NEXT cudaCheckReturn(cudaFree(dev_MemRef_arg3)); |
| ; CODE-NEXT cudaCheckReturn(cudaFree(dev_MemRef_arg2)); |
| |
| ; CODE: # kernel0 |
| ; CODE-NEXT: for (int c0 = 0; c0 <= (arg - 32 * b0 - 1) / 1048576; c0 += 1) |
| ; CODE-NEXT: if (arg >= 32 * b0 + t0 + 1048576 * c0 + 1) |
| ; CODE-NEXT: Stmt_bb6(0, 32 * b0 + t0 + 1048576 * c0); |
| |
| ; IR-LABEL: call i8* @polly_initContextCUDA() |
| ; IR: sext i32 %arg to i64 |
| ; IR-NEXT: mul i64 |
| ; IR-NEXT: @polly_allocateMemoryForDevice |
| |
| target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" |
| target triple = "x86_64-unknown-linux-gnu" |
| |
| define void @hoge(i32 %arg, i32 %arg1, [1000 x double]* %arg2, double* %arg3) { |
| bb: |
| br label %bb4 |
| |
| bb4: ; preds = %bb13, %bb |
| br label %bb6 |
| |
| bb5: ; preds = %bb13 |
| ret void |
| |
| bb6: ; preds = %bb6, %bb4 |
| %tmp = phi i64 [ 0, %bb4 ], [ %tmp10, %bb6 ] |
| %tmp7 = getelementptr inbounds double, double* %arg3, i64 %tmp |
| %tmp8 = load double, double* %tmp7, align 8 |
| %tmp9 = getelementptr inbounds [1000 x double], [1000 x double]* %arg2, i64 0, i64 %tmp |
| store double %tmp8, double* %tmp9, align 8 |
| %tmp10 = add nuw nsw i64 %tmp, 1 |
| %tmp11 = zext i32 %arg to i64 |
| %tmp12 = icmp ne i64 %tmp10, %tmp11 |
| br i1 %tmp12, label %bb6, label %bb13 |
| |
| bb13: ; preds = %bb6 |
| %tmp14 = zext i32 %arg1 to i64 |
| %tmp15 = icmp ne i64 0, %tmp14 |
| br i1 %tmp15, label %bb4, label %bb5 |
| } |