@@ -350,20 +350,118 @@ void func7() {
350
350
// OGCG: %[[ARR:.*]] = alloca [1 x ptr], align 8
351
351
// OGCG: call void @llvm.memset.p0.i64(ptr align 8 %[[ARR]], i8 0, i64 8, i1 false)
352
352
353
- void func8 (int p[10 ]) {}
354
- // CIR: cir.func @func8(%arg0: !cir.ptr<!s32i>
355
- // CIR: cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["p", init]
353
+ void func8 (int arr[10 ]) {
354
+ int e = arr[0 ];
355
+ int e2 = arr[1 ];
356
+ }
356
357
357
- // LLVM: define void @func8(ptr {{%.*}})
358
- // LLVM-NEXT: alloca ptr, i64 1, align 8
358
+ // CIR: cir.func @func8(%[[ARG:.*]]: !cir.ptr<!s32i>
359
+ // CIR: %[[ARR:.*]] = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["arr", init]
360
+ // CIR: %[[INIT:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init]
361
+ // CIR: %[[INIT_2:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["e2", init]
362
+ // CIR: cir.store %[[ARG]], %[[ARR]] : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>
363
+ // CIR: %[[IDX:.*]] = cir.const #cir.int<0> : !s32i
364
+ // CIR: %[[TMP_1:.*]] = cir.load %[[ARR]] : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
365
+ // CIR: %[[ELE_0:.*]] = cir.ptr_stride(%[[TMP_1]] : !cir.ptr<!s32i>, %[[IDX]] : !s32i), !cir.ptr<!s32i>
366
+ // CIR: %[[TMP_2:.*]] = cir.load %[[ELE_0]] : !cir.ptr<!s32i>, !s32i
367
+ // CIR: cir.store %[[TMP_2]], %[[INIT]] : !s32i, !cir.ptr<!s32i>
368
+ // CIR: %[[IDX_1:.*]] = cir.const #cir.int<1> : !s32i
369
+ // CIR: %[[TMP_3:.*]] = cir.load %[[ARR]] : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
370
+ // CIR: %[[ELE_1:.*]] = cir.ptr_stride(%[[TMP_3]] : !cir.ptr<!s32i>, %[[IDX_1]] : !s32i), !cir.ptr<!s32i>
371
+ // CIR: %[[TMP_4:.*]] = cir.load %[[ELE_1]] : !cir.ptr<!s32i>, !s32i
372
+ // CIR: cir.store %[[TMP_4]], %[[INIT_2]] : !s32i, !cir.ptr<!s32i>
373
+
374
+ // LLVM: define void @func8(ptr %[[ARG:.*]])
375
+ // LLVM: %[[ARR:.*]] = alloca ptr, i64 1, align 8
376
+ // LLVM: %[[INIT:.*]] = alloca i32, i64 1, align 4
377
+ // LLVM: %[[INIT_2:.*]] = alloca i32, i64 1, align 4
378
+ // LLVM: store ptr %[[ARG]], ptr %[[ARR]], align 8
379
+ // LLVM: %[[TMP_1:.*]] = load ptr, ptr %[[ARR]], align 8
380
+ // LLVM: %[[ELE_0:.*]] = getelementptr i32, ptr %[[TMP_1]], i64 0
381
+ // LLVM: %[[TMP_2:.*]] = load i32, ptr %[[ELE_0]], align 4
382
+ // LLVM: store i32 %[[TMP_2]], ptr %[[INIT]], align 4
383
+ // LLVM: %[[TMP_3:.*]] = load ptr, ptr %[[ARR]], align 8
384
+ // LLVM: %[[ELE_1:.*]] = getelementptr i32, ptr %[[TMP_3]], i64 1
385
+ // LLVM: %[[TMP_4:.*]] = load i32, ptr %[[ELE_1]], align 4
386
+ // LLVM: store i32 %[[TMP_4]], ptr %[[INIT_2]], align 4
387
+
388
+ // OGCG: %[[ARR:.*]] = alloca ptr, align 8
389
+ // OGCG: %[[INIT:.*]] = alloca i32, align 4
390
+ // OGCG: %[[INIT_2:.*]] = alloca i32, align 4
391
+ // OGCG: store ptr {{%.*}}, ptr %[[ARR]], align 8
392
+ // OGCG: %[[TMP_1:.*]] = load ptr, ptr %[[ARR]], align 8
393
+ // OGCG: %[[ELE_0:.*]] = getelementptr inbounds i32, ptr %[[TMP_1]], i64 0
394
+ // OGCG: %[[TMP_2:.*]] = load i32, ptr %[[ELE_0]], align 4
395
+ // OGCG: store i32 %[[TMP_2]], ptr %[[INIT]], align 4
396
+ // OGCG: %[[TMP_3:.*]] = load ptr, ptr %[[ARR]], align 8
397
+ // OGCG: %[[ELE_1:.*]] = getelementptr inbounds i32, ptr %[[TMP_3]], i64 1
398
+ // OGCG: %[[TMP_2:.*]] = load i32, ptr %[[ELE_1]], align 4
399
+ // OGCG: store i32 %[[TMP_2]], ptr %[[INIT_2]], align 4
359
400
360
- // OGCG: alloca ptr, align 8
401
+ void func9 (int arr[10 ][5 ]) {
402
+ int e = arr[1 ][2 ];
403
+ }
361
404
362
- void func9 (int pp[10 ][5 ]) {}
363
- // CIR: cir.func @func9(%arg0: !cir.ptr<!cir.array<!s32i x 5>>
364
- // CIR: cir.alloca !cir.ptr<!cir.array<!s32i x 5>>, !cir.ptr<!cir.ptr<!cir.array<!s32i x 5>>>
405
+ // CIR: cir.func @func9(%[[ARG:.*]]: !cir.ptr<!cir.array<!s32i x 5>>
406
+ // CIR: %[[ARR:.*]] = cir.alloca !cir.ptr<!cir.array<!s32i x 5>>, !cir.ptr<!cir.ptr<!cir.array<!s32i x 5>>>, ["arr", init]
407
+ // CIR: %[[INIT:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init]
408
+ // CIR: cir.store %[[ARG]], %[[ARR]] : !cir.ptr<!cir.array<!s32i x 5>>, !cir.ptr<!cir.ptr<!cir.array<!s32i x 5>>>
409
+ // CIR: %[[IDX:.*]] = cir.const #cir.int<2> : !s32i
410
+ // CIR: %[[IDX_1:.*]] = cir.const #cir.int<1> : !s32i
411
+ // CIR: %[[TMP_1:.*]] = cir.load %[[ARR]] : !cir.ptr<!cir.ptr<!cir.array<!s32i x 5>>>, !cir.ptr<!cir.array<!s32i x 5>>
412
+ // CIR: %[[ARR_1:.*]] = cir.ptr_stride(%[[TMP_1]] : !cir.ptr<!cir.array<!s32i x 5>>, %[[IDX_1]] : !s32i), !cir.ptr<!cir.array<!s32i x 5>>
413
+ // CIR: %[[ARR_1_PTR:.*]] = cir.cast(array_to_ptrdecay, %[[ARR_1]] : !cir.ptr<!cir.array<!s32i x 5>>), !cir.ptr<!s32i>
414
+ // CIR: %[[ARR_1_2:.*]] = cir.ptr_stride(%[[ARR_1_PTR]] : !cir.ptr<!s32i>, %[[IDX]] : !s32i), !cir.ptr<!s32i>
415
+ // CIR: %[[TMP_2:.*]] = cir.load %[[ARR_1_2]] : !cir.ptr<!s32i>, !s32i
416
+ // CIR: cir.store %[[TMP_2]], %[[INIT]] : !s32i, !cir.ptr<!s32i>
417
+
418
+ // LLVM: define void @func9(ptr %[[ARG:.*]])
419
+ // LLVM: %[[ARR:.*]] = alloca ptr, i64 1, align 8
420
+ // LLVM: %[[INIT:.*]] = alloca i32, i64 1, align 4
421
+ // LLVM: store ptr %[[ARG]], ptr %[[ARR]], align 8
422
+ // LLVM: %[[TMP_1:.*]] = load ptr, ptr %[[ARR]], align 8
423
+ // LLVM: %[[ARR_1:.*]] = getelementptr [5 x i32], ptr %[[TMP_1]], i64 1
424
+ // LLVM: %[[ARR_1_PTR:.*]] = getelementptr i32, ptr %[[ARR_1]], i32 0
425
+ // LLVM: %[[ARR_1_2:.*]] = getelementptr i32, ptr %[[ARR_1_PTR]], i64 2
426
+ // LLVM: %[[TMP_2:.*]] = load i32, ptr %[[ARR_1_2]], align 4
427
+ // LLVM: store i32 %[[TMP_2]], ptr %[[INIT]], align 4
428
+
429
+ // OGCG: %[[ARR:.*]] = alloca ptr, align 8
430
+ // OGCG: %[[INIT:.*]] = alloca i32, align 4
431
+ // OGCG: store ptr {{%.*}}, ptr %[[ARR]], align 8
432
+ // OGCG: %[[TMP_1:.*]] = load ptr, ptr %[[ARR]], align 8
433
+ // OGCG: %[[ARR_1:.*]] = getelementptr inbounds [5 x i32], ptr %[[TMP_1]], i64 1
434
+ // OGCG: %[[ARR_1_2:.*]] = getelementptr inbounds [5 x i32], ptr %[[ARR_1]], i64 0, i64 2
435
+ // OGCG: %[[TMP_2:.*]] = load i32, ptr %[[ARR_1_2]], align 4
436
+ // OGCG: store i32 %[[TMP_2]], ptr %[[INIT]], align 4
437
+
438
+ void func10 (int *a) {
439
+ int e = a[5 ];
440
+ }
365
441
366
- // LLVM: define void @func9(ptr {{%.*}})
367
- // LLVM-NEXT: alloca ptr, i64 1, align 8
442
+ // CIR: cir.func @func10(%[[ARG:.*]]: !cir.ptr<!s32i>
443
+ // CIR: %[[ARR:.*]] = cir.alloca !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>, ["a", init]
444
+ // CIR: %[[INIT:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init]
445
+ // CIR: cir.store %[[ARG]], %[[ARR]] : !cir.ptr<!s32i>, !cir.ptr<!cir.ptr<!s32i>>
446
+ // CIR: %[[IDX:.*]] = cir.const #cir.int<5> : !s32i
447
+ // CIR: %[[TMP_1:.*]] = cir.load %[[ARR]] : !cir.ptr<!cir.ptr<!s32i>>, !cir.ptr<!s32i>
448
+ // CIR: %[[ELE:.*]] = cir.ptr_stride(%[[TMP_1]] : !cir.ptr<!s32i>, %[[IDX]] : !s32i), !cir.ptr<!s32i>
449
+ // CIR: %[[TMP_2:.*]] = cir.load %[[ELE]] : !cir.ptr<!s32i>, !s32i
450
+ // CIR: cir.store %[[TMP_2]], %[[INIT]] : !s32i, !cir.ptr<!s32i>
451
+
452
+ // LLVM: define void @func10(ptr %[[ARG:.*]]) {
453
+ // LLVM: %[[ARR:.*]] = alloca ptr, i64 1, align 8
454
+ // LLVM: %[[INIT:.*]] = alloca i32, i64 1, align 4
455
+ // LLVM: store ptr %[[ARG]], ptr %[[ARR]], align 8
456
+ // LLVM: %[[TMP_1:.*]] = load ptr, ptr %[[ARR]], align 8
457
+ // LLVM: %[[ELE:.*]] = getelementptr i32, ptr %[[TMP_1]], i64 5
458
+ // LLVM: %[[TMP_2:.*]] = load i32, ptr %[[ELE]], align 4
459
+ // LLVM: store i32 %[[TMP_2]], ptr %[[INIT]], align 4
368
460
369
- // OGCG: alloca ptr, align 8
461
+ // OGCG: %[[ARR:.*]] = alloca ptr, align 8
462
+ // OGCG: %[[INIT:.*]] = alloca i32, align 4
463
+ // OGCG: store ptr {{%.*}}, ptr %[[ARR]], align 8
464
+ // OGCG: %[[TMP_1:.*]] = load ptr, ptr %[[ARR]], align 8
465
+ // OGCG: %[[ELE:.*]] = getelementptr inbounds i32, ptr %[[TMP_1]], i64 5
466
+ // OGCG: %[[TMP_2:.*]] = load i32, ptr %[[ELE]], align 4
467
+ // OGCG: store i32 %[[TMP_2]], ptr %[[INIT]], align 4
0 commit comments