Index: llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp =================================================================== --- llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp +++ llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp @@ -1945,11 +1945,17 @@ llvm_unreachable("unsupported integer const type"); break; } + case Type::HalfTyID: case Type::FloatTyID: case Type::DoubleTyID: { const ConstantFP *CFP = dyn_cast(CPV); Type *Ty = CFP->getType(); - if (Ty == Type::getFloatTy(CPV->getContext())) { + if (Ty == Type::getHalfTy(CPV->getContext())) { + APInt API = CFP->getValueAPF().bitcastToAPInt(); + uint16_t float16 = API.getLoBits(16).getZExtValue(); + ConvertIntToBytes<>(ptr, float16); + aggBuffer->addBytes(ptr, 2, Bytes); + } else if (Ty == Type::getFloatTy(CPV->getContext())) { float float32 = (float) CFP->getValueAPF().convertToFloat(); ConvertFloatToBytes(ptr, float32); aggBuffer->addBytes(ptr, 4, Bytes); Index: llvm/trunk/test/CodeGen/NVPTX/half.ll =================================================================== --- llvm/trunk/test/CodeGen/NVPTX/half.ll +++ llvm/trunk/test/CodeGen/NVPTX/half.ll @@ -1,5 +1,9 @@ ; RUN: llc < %s -march=nvptx | FileCheck %s +; CHECK: .b8 half_array[8] = {1, 2, 3, 4, 5, 6, 7, 8}; +@"half_array" = addrspace(1) constant [4 x half] + [half 0xH0201, half 0xH0403, half 0xH0605, half 0xH0807] + define void @test_load_store(half addrspace(1)* %in, half addrspace(1)* %out) { ; CHECK-LABEL: @test_load_store ; CHECK: ld.global.b16 [[TMP:%h[0-9]+]], [{{%r[0-9]+}}]