xref: /llvm-project/llvm/test/CodeGen/Generic/add-with-overflow-128.ll (revision 0e8bd5a44a1bd8034706189b49a7a816c59304cd)
1; RUN: llc < %s
2
3; NVPTX fails to LowerFormalArguments for arg type i96
4; the arg byte size must be one of the {16, 8, 4, 2}
5; XFAIL: target=nvptx{{.*}}
6
7@ok = internal constant [4 x i8] c"%d\0A\00"
8@no = internal constant [4 x i8] c"no\0A\00"
9
10
11
12define i1 @func2(i128 zeroext %v1, i128 zeroext %v2) nounwind {
13entry:
14  %t = call {i128, i1} @llvm.uadd.with.overflow.i128(i128 %v1, i128 %v2)
15  %sum = extractvalue {i128, i1} %t, 0
16  %sum32 = trunc i128 %sum to i32
17  %obit = extractvalue {i128, i1} %t, 1
18  br i1 %obit, label %carry, label %normal
19
20normal:
21  %t1 = tail call i32 (ptr, ...) @printf( ptr @ok, i32 %sum32 ) nounwind
22  ret i1 true
23
24carry:
25  %t2 = tail call i32 (ptr, ...) @printf( ptr @no ) nounwind
26  ret i1 false
27}
28
29declare i32 @printf(ptr, ...) nounwind
30declare {i96, i1} @llvm.sadd.with.overflow.i96(i96, i96)
31declare {i128, i1} @llvm.uadd.with.overflow.i128(i128, i128)
32
33define i1 @func1(i96 signext %v1, i96 signext %v2) nounwind {
34entry:
35  %t = call {i96, i1} @llvm.sadd.with.overflow.i96(i96 %v1, i96 %v2)
36  %obit = extractvalue {i96, i1} %t, 1
37  ret i1 %obit
38}
39