class_docstr: Device allocations are lowered to TVMBackend* calls
  
  This test validates the current behavior of LowerTVMBuiltin.  This
  unit test may be improved in the future by addressing:
  
  - TVMScript always produces "handle" dtype for
    `T.tvm_throw_last_error`, while LowerTVMBuiltin outputs "int32"
    dtype.
class_docstr_tok: ["Device","allocations","are","lowered","to","TVMBackend","*","calls","This","test","validates","the","current","behavior","of","LowerTVMBuiltin",".","This","unit","test","may","be","improved","in","the","future","by","addressing",":","-","TVMScript","always","produces","``","handle","''","dtype","for","`","T.tvm_throw_last_error","`",",","while","LowerTVMBuiltin","outputs","``","int32","''","dtype","."]
code: def expected():
      T.func_attr({"target": T.target("llvm")})
      ptr: T.handle("float32") = T.TVMBackendAllocWorkspace(
          2, 0, T.uint64(64), 2, 32
      )
      T.attr(ptr, "storage_alignment", 64)
      if T.isnullptr(ptr):
          T.Call("int32", "tir.tvm_throw_last_error", [])
      buf = T.decl_buffer((16,), data=ptr)
      buf[0] = T.float32(0)
      if T.TVMBackendFreeWorkspace(2, 0, ptr) != 0:
          T.Call("int32", "tir.tvm_throw_last_error", [])
  
imports: import tvm
  import tvm.testing
  from tvm import te
  from tvm.script import tir
  import numpy
  from tvm.tir.schedule.testing import assert_structural_equal_ignore_global_symbol
label_desc: Use image node_id 2 for calling the TestLowerDeviceAllocate obj's underlying member method code with example usage: obj.expected() without return types