Files
clang-p2996/llvm/test/CodeGen/NVPTX/reg-copy.ll
Pavel Kopyl 01afb3fb99 [NVPTX] Use by default 'sm_60' architecture when expanding %ptxas-verify macro.
Also get rid of explicitly specified '-march' values for old architectures.
This simplifies %ptxas-verify statements.
After the change, we can potentially miss cases where a new functionality
is added to the architecture without appropriate checks in the
backend. On the other hand, this is mostly true for old architectures
that have been thoroughly tested.

Differential Revision: https://reviews.llvm.org/D141736
2023-02-17 20:49:04 +01:00

224 lines
10 KiB
LLVM

; RUN: llc < %s -march=nvptx64 -mcpu=sm_35 | FileCheck %s
; RUN: %if ptxas %{ llc < %s -march=nvptx64 -mcpu=sm_35 | %ptxas-verify %}
target datalayout = "e-i64:64-v16:16-v32:32-n16:32:64"
target triple = "nvptx64-unknown-unknown"
define void @PR24303(ptr %f) {
; CHECK-LABEL: .visible .entry PR24303(
; Do not use mov.f or mov.u to convert between float and int.
; CHECK-NOT: mov.{{f|u}}{{32|64}} %f{{[0-9]+}}, %r{{[0-9]+}}
; CHECK-NOT: mov.{{f|u}}{{32|64}} %r{{[0-9]+}}, %f{{[0-9]+}}
entry:
%arrayidx1 = getelementptr inbounds float, ptr %f, i64 1
%0 = load float, ptr %f, align 4
%1 = load float, ptr %arrayidx1, align 4
%arrayidx2 = getelementptr inbounds float, ptr %f, i64 2
%arrayidx3 = getelementptr inbounds float, ptr %f, i64 3
%2 = load float, ptr %arrayidx2, align 4
%3 = load float, ptr %arrayidx3, align 4
%mul.i = fmul float %0, %2
%mul4.i = fmul float %1, %3
%mul5.i = fmul float %0, %3
%mul6.i = fmul float %1, %2
%sub.i = fsub float %mul.i, %mul4.i
%4 = bitcast float %sub.i to i32
%add.i = fadd float %mul6.i, %mul5.i
%5 = bitcast float %add.i to i32
%6 = tail call float @llvm.nvvm.fabs.f(float %sub.i) #2
%7 = fcmp ugt float %6, 0x7FF0000000000000
br i1 %7, label %land.lhs.true.i, label %_ZN12cuda_builtinmlIfEENS_7complexIT_EERKS3_S5_.exit
land.lhs.true.i: ; preds = %entry
%8 = tail call float @llvm.nvvm.fabs.f(float %add.i) #2
%9 = fcmp ugt float %8, 0x7FF0000000000000
br i1 %9, label %if.then.i, label %_ZN12cuda_builtinmlIfEENS_7complexIT_EERKS3_S5_.exit
if.then.i: ; preds = %land.lhs.true.i
%10 = tail call float @llvm.nvvm.fabs.f(float %0) #2
%11 = fcmp oeq float %10, 0x7FF0000000000000
%.pre.i = tail call float @llvm.nvvm.fabs.f(float %1) #2
%12 = fcmp oeq float %.pre.i, 0x7FF0000000000000
%or.cond.i = or i1 %11, %12
br i1 %or.cond.i, label %if.then.14.i, label %if.end.31.i
if.then.14.i: ; preds = %if.then.i
%13 = bitcast float %0 to i32
%14 = and i32 %13, -2147483648
%15 = select i1 %11, i32 1065353216, i32 0
%16 = or i32 %15, %14
%17 = bitcast i32 %16 to float
%18 = bitcast float %1 to i32
%19 = and i32 %18, -2147483648
%20 = select i1 %12, i32 1065353216, i32 0
%21 = or i32 %20, %19
%22 = bitcast i32 %21 to float
%23 = tail call float @llvm.nvvm.fabs.f(float %2) #2
%24 = fcmp ugt float %23, 0x7FF0000000000000
br i1 %24, label %if.then.24.i, label %if.end.i
if.then.24.i: ; preds = %if.then.14.i
%25 = bitcast float %2 to i32
%26 = and i32 %25, -2147483648
%27 = bitcast i32 %26 to float
br label %if.end.i
if.end.i: ; preds = %if.then.24.i, %if.then.14.i
%__c.0.i = phi float [ %27, %if.then.24.i ], [ %2, %if.then.14.i ]
%28 = tail call float @llvm.nvvm.fabs.f(float %3) #2
%29 = fcmp ugt float %28, 0x7FF0000000000000
br i1 %29, label %if.then.28.i, label %if.end.31.i
if.then.28.i: ; preds = %if.end.i
%30 = bitcast float %3 to i32
%31 = and i32 %30, -2147483648
%32 = bitcast i32 %31 to float
br label %if.end.31.i
if.end.31.i: ; preds = %if.then.28.i, %if.end.i, %if.then.i
%__d.1.i = phi float [ %32, %if.then.28.i ], [ %3, %if.end.i ], [ %3, %if.then.i ]
%__c.1.i = phi float [ %__c.0.i, %if.then.28.i ], [ %__c.0.i, %if.end.i ], [ %2, %if.then.i ]
%__b.0.i = phi float [ %22, %if.then.28.i ], [ %22, %if.end.i ], [ %1, %if.then.i ]
%__a.0.i = phi float [ %17, %if.then.28.i ], [ %17, %if.end.i ], [ %0, %if.then.i ]
%__recalc.0.off0.i = phi i1 [ true, %if.then.28.i ], [ true, %if.end.i ], [ false, %if.then.i ]
%33 = tail call float @llvm.nvvm.fabs.f(float %__c.1.i) #2
%34 = fcmp oeq float %33, 0x7FF0000000000000
%.pre6.i = tail call float @llvm.nvvm.fabs.f(float %__d.1.i) #2
%35 = fcmp oeq float %.pre6.i, 0x7FF0000000000000
%or.cond8.i = or i1 %34, %35
br i1 %or.cond8.i, label %if.then.37.i, label %if.end.56.i
if.then.37.i: ; preds = %if.end.31.i
%36 = bitcast float %__c.1.i to i32
%37 = and i32 %36, -2147483648
%38 = select i1 %34, i32 1065353216, i32 0
%39 = or i32 %38, %37
%40 = bitcast i32 %39 to float
%41 = bitcast float %__d.1.i to i32
%42 = and i32 %41, -2147483648
%43 = select i1 %35, i32 1065353216, i32 0
%44 = or i32 %43, %42
%45 = bitcast i32 %44 to float
%46 = tail call float @llvm.nvvm.fabs.f(float %__a.0.i) #2
%47 = fcmp ugt float %46, 0x7FF0000000000000
br i1 %47, label %if.then.48.i, label %if.end.50.i
if.then.48.i: ; preds = %if.then.37.i
%48 = bitcast float %__a.0.i to i32
%49 = and i32 %48, -2147483648
%50 = bitcast i32 %49 to float
br label %if.end.50.i
if.end.50.i: ; preds = %if.then.48.i, %if.then.37.i
%__a.1.i = phi float [ %50, %if.then.48.i ], [ %__a.0.i, %if.then.37.i ]
%51 = tail call float @llvm.nvvm.fabs.f(float %__b.0.i) #2
%52 = fcmp ugt float %51, 0x7FF0000000000000
br i1 %52, label %if.then.53.i, label %if.then.93.i
if.then.53.i: ; preds = %if.end.50.i
%53 = bitcast float %__b.0.i to i32
%54 = and i32 %53, -2147483648
%55 = bitcast i32 %54 to float
br label %if.then.93.i
if.end.56.i: ; preds = %if.end.31.i
br i1 %__recalc.0.off0.i, label %if.then.93.i, label %land.lhs.true.58.i
land.lhs.true.58.i: ; preds = %if.end.56.i
%56 = tail call float @llvm.nvvm.fabs.f(float %mul.i) #2
%57 = fcmp oeq float %56, 0x7FF0000000000000
br i1 %57, label %if.then.70.i, label %lor.lhs.false.61.i
lor.lhs.false.61.i: ; preds = %land.lhs.true.58.i
%58 = tail call float @llvm.nvvm.fabs.f(float %mul4.i) #2
%59 = fcmp oeq float %58, 0x7FF0000000000000
br i1 %59, label %if.then.70.i, label %lor.lhs.false.64.i
lor.lhs.false.64.i: ; preds = %lor.lhs.false.61.i
%60 = tail call float @llvm.nvvm.fabs.f(float %mul5.i) #2
%61 = fcmp oeq float %60, 0x7FF0000000000000
br i1 %61, label %if.then.70.i, label %lor.lhs.false.67.i
lor.lhs.false.67.i: ; preds = %lor.lhs.false.64.i
%62 = tail call float @llvm.nvvm.fabs.f(float %mul6.i) #2
%63 = fcmp oeq float %62, 0x7FF0000000000000
br i1 %63, label %if.then.70.i, label %_ZN12cuda_builtinmlIfEENS_7complexIT_EERKS3_S5_.exit
if.then.70.i: ; preds = %lor.lhs.false.67.i, %lor.lhs.false.64.i, %lor.lhs.false.61.i, %land.lhs.true.58.i
%64 = tail call float @llvm.nvvm.fabs.f(float %__a.0.i) #2
%65 = fcmp ugt float %64, 0x7FF0000000000000
br i1 %65, label %if.then.73.i, label %if.end.75.i
if.then.73.i: ; preds = %if.then.70.i
%66 = bitcast float %__a.0.i to i32
%67 = and i32 %66, -2147483648
%68 = bitcast i32 %67 to float
br label %if.end.75.i
if.end.75.i: ; preds = %if.then.73.i, %if.then.70.i
%__a.3.i = phi float [ %68, %if.then.73.i ], [ %__a.0.i, %if.then.70.i ]
%69 = tail call float @llvm.nvvm.fabs.f(float %__b.0.i) #2
%70 = fcmp ugt float %69, 0x7FF0000000000000
br i1 %70, label %if.then.78.i, label %if.end.80.i
if.then.78.i: ; preds = %if.end.75.i
%71 = bitcast float %__b.0.i to i32
%72 = and i32 %71, -2147483648
%73 = bitcast i32 %72 to float
br label %if.end.80.i
if.end.80.i: ; preds = %if.then.78.i, %if.end.75.i
%__b.3.i = phi float [ %73, %if.then.78.i ], [ %__b.0.i, %if.end.75.i ]
%74 = fcmp ugt float %33, 0x7FF0000000000000
br i1 %74, label %if.then.83.i, label %if.end.85.i
if.then.83.i: ; preds = %if.end.80.i
%75 = bitcast float %__c.1.i to i32
%76 = and i32 %75, -2147483648
%77 = bitcast i32 %76 to float
br label %if.end.85.i
if.end.85.i: ; preds = %if.then.83.i, %if.end.80.i
%__c.3.i = phi float [ %77, %if.then.83.i ], [ %__c.1.i, %if.end.80.i ]
%78 = fcmp ugt float %.pre6.i, 0x7FF0000000000000
br i1 %78, label %if.then.88.i, label %if.then.93.i
if.then.88.i: ; preds = %if.end.85.i
%79 = bitcast float %__d.1.i to i32
%80 = and i32 %79, -2147483648
%81 = bitcast i32 %80 to float
br label %if.then.93.i
if.then.93.i: ; preds = %if.then.88.i, %if.end.85.i, %if.end.56.i, %if.then.53.i, %if.end.50.i
%__d.4.ph.i = phi float [ %__d.1.i, %if.end.85.i ], [ %81, %if.then.88.i ], [ %__d.1.i, %if.end.56.i ], [ %45, %if.end.50.i ], [ %45, %if.then.53.i ]
%__c.4.ph.i = phi float [ %__c.3.i, %if.end.85.i ], [ %__c.3.i, %if.then.88.i ], [ %__c.1.i, %if.end.56.i ], [ %40, %if.end.50.i ], [ %40, %if.then.53.i ]
%__b.4.ph.i = phi float [ %__b.3.i, %if.end.85.i ], [ %__b.3.i, %if.then.88.i ], [ %__b.0.i, %if.end.56.i ], [ %__b.0.i, %if.end.50.i ], [ %55, %if.then.53.i ]
%__a.4.ph.i = phi float [ %__a.3.i, %if.end.85.i ], [ %__a.3.i, %if.then.88.i ], [ %__a.0.i, %if.end.56.i ], [ %__a.1.i, %if.end.50.i ], [ %__a.1.i, %if.then.53.i ]
%mul95.i = fmul float %__c.4.ph.i, %__a.4.ph.i
%mul96.i = fmul float %__d.4.ph.i, %__b.4.ph.i
%sub97.i = fsub float %mul95.i, %mul96.i
%mul98.i = fmul float %sub97.i, 0x7FF0000000000000
%82 = bitcast float %mul98.i to i32
%mul100.i = fmul float %__d.4.ph.i, %__a.4.ph.i
%mul101.i = fmul float %__c.4.ph.i, %__b.4.ph.i
%add102.i = fadd float %mul101.i, %mul100.i
%mul103.i = fmul float %add102.i, 0x7FF0000000000000
%83 = bitcast float %mul103.i to i32
br label %_ZN12cuda_builtinmlIfEENS_7complexIT_EERKS3_S5_.exit
_ZN12cuda_builtinmlIfEENS_7complexIT_EERKS3_S5_.exit: ; preds = %if.then.93.i, %lor.lhs.false.67.i, %land.lhs.true.i, %entry
%84 = phi i32 [ %4, %land.lhs.true.i ], [ %4, %entry ], [ %82, %if.then.93.i ], [ %4, %lor.lhs.false.67.i ]
%85 = phi i32 [ %5, %land.lhs.true.i ], [ %5, %entry ], [ %83, %if.then.93.i ], [ %5, %lor.lhs.false.67.i ]
%arrayidx5 = getelementptr inbounds float, ptr %f, i64 5
store i32 %84, ptr %arrayidx5, align 4
%arrayidx7 = getelementptr inbounds float, ptr %f, i64 6
store i32 %85, ptr %arrayidx7, align 4
ret void
}
declare float @llvm.nvvm.fabs.f(float)
!nvvm.annotations = !{!0}
!0 = !{ptr @PR24303, !"kernel", i32 1}