Skip to content

Commit fe69514

Browse files
badervladimirlaz
authored andcommitted
Fix translation of non 32/64-bit constants
1 parent b200eef commit fe69514

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

llvm-spirv/lib/SPIRV/libSPIRV/SPIRVValue.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,7 @@ template <spv::Op OC> class SPIRVConstantBase : public SPIRVValue {
171171

172172
protected:
173173
void recalculateWordCount() {
174-
NumWords = Type->getBitWidth() / 32;
175-
if (NumWords < 1)
176-
NumWords = 1;
174+
NumWords = (Type->getBitWidth() + 31) / 32;
177175
WordCount = 3 + NumWords;
178176
}
179177
void validate() const override {

llvm-spirv/test/capability-arbitrary-precision-integers.ll

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:
2020
target triple = "spir64-unknown-unknown"
2121

2222
; CHECK-LLVM: @a = addrspace(1) global i13 0, align 2
23-
; CHECK-LLVM: @b = addrspace(1) global i58 0, align 8
2423
@a = addrspace(1) global i13 0, align 2
24+
; CHECK-LLVM: @b = addrspace(1) global i58 0, align 8
2525
@b = addrspace(1) global i58 0, align 8
26+
; CHECK-LLVM: @c = addrspace(1) global i48 0, align 8
27+
@c = addrspace(1) global i48 0, align 8
2628

2729
; Function Attrs: noinline nounwind optnone
2830
; CHECK-LLVM: void @_Z4funci(i30 %a)
@@ -34,5 +36,7 @@ entry:
3436
store i30 %a, i30* %a.addr, align 4
3537
; CHECK-LLVM: store i30 1, i30* %a.addr
3638
store i30 1, i30* %a.addr, align 4
39+
; CHECK-LLVM: store i48 -4294901761, i48 addrspace(1)* @c
40+
store i48 -4294901761, i48 addrspace(1)* @c, align 8
3741
ret void
3842
}

0 commit comments

Comments
 (0)