mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
64 lines
2.3 KiB
C
64 lines
2.3 KiB
C
// #target: macos-x64
|
|
|
|
module test;
|
|
|
|
macro getisprime($x)
|
|
{
|
|
$switch ($x):
|
|
$case 1:
|
|
$case 2:
|
|
$case 3:
|
|
$case 5:
|
|
$case 7:
|
|
$case 11:
|
|
$case 13:
|
|
return "prime";
|
|
$case 4:
|
|
$case 6:
|
|
$case 8:
|
|
$case 9:
|
|
$case 10:
|
|
$case 12:
|
|
return "not_prime";
|
|
$case 17:
|
|
$default:
|
|
return "donnowifprime";
|
|
$endswitch;
|
|
}
|
|
|
|
extern fn void printf(char*, ...);
|
|
|
|
fn void main()
|
|
{
|
|
printf("%s\n", getisprime(3));
|
|
printf("%s\n", getisprime(12));
|
|
printf("%s\n", getisprime(4));
|
|
printf("%s\n", getisprime(100));
|
|
printf("%s\n", getisprime(17));
|
|
}
|
|
|
|
/* #expect: test.ll
|
|
|
|
@.str = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
|
|
@.str.1 = private unnamed_addr constant [6 x i8] c"prime\00", align 1
|
|
@.str.2 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
|
|
@.str.3 = private unnamed_addr constant [10 x i8] c"not_prime\00", align 1
|
|
@.str.4 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
|
|
@.str.5 = private unnamed_addr constant [10 x i8] c"not_prime\00", align 1
|
|
@.str.6 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
|
|
@.str.7 = private unnamed_addr constant [14 x i8] c"donnowifprime\00", align 1
|
|
@.str.8 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1
|
|
@.str.9 = private unnamed_addr constant [14 x i8] c"donnowifprime\00", align 1
|
|
; Function Attrs: nounwind
|
|
declare void @printf(i8*, ...) #0
|
|
; Function Attrs: nounwind
|
|
define void @test.main() #0 {
|
|
entry:
|
|
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), [5 x i8]* bitcast ([6 x i8]* @.str.1 to [5 x i8]*))
|
|
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i32 0, i32 0), [9 x i8]* bitcast ([10 x i8]* @.str.3 to [9 x i8]*))
|
|
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i32 0, i32 0), [9 x i8]* bitcast ([10 x i8]* @.str.5 to [9 x i8]*))
|
|
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i32 0, i32 0), [13 x i8]* bitcast ([14 x i8]* @.str.7 to [13 x i8]*))
|
|
call void (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i32 0, i32 0), [13 x i8]* bitcast ([14 x i8]* @.str.9 to [13 x i8]*))
|
|
ret void
|
|
}
|