mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 20:11:17 +00:00
95 lines
2.5 KiB
Plaintext
95 lines
2.5 KiB
Plaintext
// #target: macos-x64
|
|
fn int* elvis(int *x, int *y)
|
|
{
|
|
return x ?: y;
|
|
}
|
|
|
|
|
|
fn int* elvis2(int *x, int *y)
|
|
{
|
|
return x ?: (y ?: x);
|
|
}
|
|
|
|
fn bool elvis3(bool x, bool y)
|
|
{
|
|
return x ?: y;
|
|
}
|
|
|
|
|
|
/* #expect: elvis.ll
|
|
|
|
define ptr @elvis.elvis(ptr %0, ptr %1) #0 {
|
|
entry:
|
|
%.anon = alloca ptr, align 8
|
|
store ptr %0, ptr %.anon, align 8
|
|
%i2b = icmp ne ptr %0, null
|
|
br i1 %i2b, label %cond.lhs, label %cond.rhs
|
|
|
|
cond.lhs: ; preds = %entry
|
|
%2 = load ptr, ptr %.anon, align 8
|
|
br label %cond.phi
|
|
|
|
cond.rhs: ; preds = %entry
|
|
br label %cond.phi
|
|
|
|
cond.phi: ; preds = %cond.rhs, %cond.lhs
|
|
%val = phi ptr [ %2, %cond.lhs ], [ %1, %cond.rhs ]
|
|
ret ptr %val
|
|
}
|
|
|
|
; Function Attrs: nounwind uwtable
|
|
define ptr @elvis.elvis2(ptr %0, ptr %1) #0 {
|
|
entry:
|
|
%.anon = alloca ptr, align 8
|
|
%.anon1 = alloca ptr, align 8
|
|
store ptr %0, ptr %.anon, align 8
|
|
%i2b = icmp ne ptr %0, null
|
|
br i1 %i2b, label %cond.lhs, label %cond.rhs
|
|
|
|
cond.lhs: ; preds = %entry
|
|
%2 = load ptr, ptr %.anon, align 8
|
|
br label %cond.phi5
|
|
|
|
cond.rhs: ; preds = %entry
|
|
store ptr %1, ptr %.anon1, align 8
|
|
%i2b2 = icmp ne ptr %1, null
|
|
br i1 %i2b2, label %cond.lhs3, label %cond.rhs4
|
|
|
|
cond.lhs3: ; preds = %cond.rhs
|
|
%3 = load ptr, ptr %.anon1, align 8
|
|
br label %cond.phi
|
|
|
|
cond.rhs4: ; preds = %cond.rhs
|
|
br label %cond.phi
|
|
|
|
cond.phi: ; preds = %cond.rhs4, %cond.lhs3
|
|
%val = phi ptr [ %3, %cond.lhs3 ], [ %0, %cond.rhs4 ]
|
|
br label %cond.phi5
|
|
|
|
cond.phi5: ; preds = %cond.phi, %cond.lhs
|
|
%val6 = phi ptr [ %2, %cond.lhs ], [ %val, %cond.phi ]
|
|
ret ptr %val6
|
|
}
|
|
|
|
define zeroext i8 @elvis.elvis3(i8 zeroext %0, i8 zeroext %1) #0 {
|
|
entry:
|
|
%.anon = alloca i8, align 1
|
|
store i8 %0, ptr %.anon, align 1
|
|
%2 = trunc i8 %0 to i1
|
|
br i1 %2, label %cond.lhs, label %cond.rhs
|
|
|
|
cond.lhs: ; preds = %entry
|
|
%3 = load i8, ptr %.anon, align 1
|
|
%4 = trunc i8 %3 to i1
|
|
br label %cond.phi
|
|
|
|
cond.rhs: ; preds = %entry
|
|
%5 = trunc i8 %1 to i1
|
|
br label %cond.phi
|
|
|
|
cond.phi: ; preds = %cond.rhs, %cond.lhs
|
|
%val = phi i1 [ %4, %cond.lhs ], [ %5, %cond.rhs ]
|
|
%6 = zext i1 %val to i8
|
|
ret i8 %6
|
|
}
|