@@ -901,3 +901,49 @@ loop:
901901exit:
902902 ret void
903903}
904+
905+ define void @sext_i128 () {
906+ ; CHECK-LABEL: @sext_i128(
907+ ; CHECK-NEXT: entry:
908+ ; CHECK-NEXT: br label [[LOOP:%.*]]
909+ ; CHECK: loop:
910+ ; CHECK-NEXT: [[I:%.*]] = icmp slt i128 0, 0
911+ ; CHECK-NEXT: [[I2:%.*]] = sext i1 [[I]] to i128
912+ ; CHECK-NEXT: [[I3:%.*]] = or i128 [[I2]], 0
913+ ; CHECK-NEXT: [[I4:%.*]] = icmp slt i128 [[I3]], 0
914+ ; CHECK-NEXT: [[I5:%.*]] = sext i1 [[I4]] to i128
915+ ; CHECK-NEXT: [[I4_FROZEN:%.*]] = freeze i1 [[I4]]
916+ ; CHECK-NEXT: br i1 [[I4_FROZEN]], label [[SELECT_TRUE_SINK:%.*]], label [[SELECT_END:%.*]]
917+ ; CHECK: select.true.sink:
918+ ; CHECK-NEXT: [[TMP0:%.*]] = add i128 -1, 0
919+ ; CHECK-NEXT: br label [[SELECT_END]]
920+ ; CHECK: select.end:
921+ ; CHECK-NEXT: [[I6:%.*]] = phi i128 [ [[TMP0]], [[SELECT_TRUE_SINK]] ], [ 0, [[LOOP]] ]
922+ ; CHECK-NEXT: [[I7:%.*]] = icmp slt i128 [[I6]], 0
923+ ; CHECK-NEXT: [[I8:%.*]] = sext i1 [[I7]] to i128
924+ ; CHECK-NEXT: [[I7_FROZEN:%.*]] = freeze i1 [[I7]]
925+ ; CHECK-NEXT: br i1 [[I7_FROZEN]], label [[SELECT_TRUE_SINK2:%.*]], label [[SELECT_END1:%.*]]
926+ ; CHECK: select.true.sink2:
927+ ; CHECK-NEXT: [[TMP1:%.*]] = add i128 -1, 0
928+ ; CHECK-NEXT: br label [[SELECT_END1]]
929+ ; CHECK: select.end1:
930+ ; CHECK-NEXT: [[I9:%.*]] = phi i128 [ [[TMP1]], [[SELECT_TRUE_SINK2]] ], [ 0, [[SELECT_END]] ]
931+ ; CHECK-NEXT: [[I10:%.*]] = or i128 [[I9]], 0
932+ ; CHECK-NEXT: br label [[LOOP]]
933+ ;
934+ entry:
935+ br label %loop
936+
937+ loop:
938+ %i = icmp slt i128 0 , 0
939+ %i2 = sext i1 %i to i128
940+ %i3 = or i128 %i2 , 0
941+ %i4 = icmp slt i128 %i3 , 0
942+ %i5 = sext i1 %i4 to i128
943+ %i6 = add i128 %i5 , 0
944+ %i7 = icmp slt i128 %i6 , 0
945+ %i8 = sext i1 %i7 to i128
946+ %i9 = add i128 %i8 , 0
947+ %i10 = or i128 %i9 , 0
948+ br label %loop
949+ }
0 commit comments