Skip to content

Commit d480caa

Browse files
author
Greg Roth
committed
Add long vec scalarizer test
Left it out of the original commit Made a couple additions to the main test too
1 parent 47d42f0 commit d480caa

4 files changed

Lines changed: 1241 additions & 16 deletions

File tree

tools/clang/test/CodeGenDXIL/hlsl/types/longvec-operators-vec1s.hlsl

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -375,44 +375,44 @@ export TYPE index(TYPE things[10], int i)[10] {
375375
#ifdef INT
376376
// Test bit twiddling operators.
377377
// INT-LABEL: define void @"\01?bittwiddlers
378-
export void bittwiddlers(inout TYPE things[11]) {
379-
// INT: [[adr1:%[0-9]*]] = getelementptr inbounds [11 x [[TYPE]]], [11 x [[TYPE]]]* %things, i32 0, i32 1
378+
export void bittwiddlers(inout TYPE things[13]) {
379+
// INT: [[adr1:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 1
380380
// INT: [[ld1:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr1]]
381381
// INT: [[val1:%[0-9]*]] = extractelement [[TYPE]] [[ld1]], i32 0
382382
// INT: [[xor1:%[0-9]*]] = xor [[ELTY]] [[val1]], -1
383383
// INT: [[res1:%.*]] = insertelement [[TYPE]] undef, [[ELTY]] [[xor1]], i32 0
384-
// INT: [[adr0:%[0-9]*]] = getelementptr inbounds [11 x [[TYPE]]], [11 x [[TYPE]]]* %things, i32 0, i32 0
384+
// INT: [[adr0:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 0
385385
// INT: store [[TYPE]] [[res1]], [[TYPE]]* [[adr0]]
386386
things[0] = ~things[1];
387387

388-
// INT: [[adr2:%[0-9]*]] = getelementptr inbounds [11 x [[TYPE]]], [11 x [[TYPE]]]* %things, i32 0, i32 2
388+
// INT: [[adr2:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 2
389389
// INT: [[ld2:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr2]]
390390
// INT: [[val2:%[0-9]*]] = extractelement [[TYPE]] [[ld2]], i32 0
391-
// INT: [[adr3:%[0-9]*]] = getelementptr inbounds [11 x [[TYPE]]], [11 x [[TYPE]]]* %things, i32 0, i32 3
391+
// INT: [[adr3:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 3
392392
// INT: [[ld3:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr3]]
393393
// INT: [[val3:%[0-9]*]] = extractelement [[TYPE]] [[ld3]], i32 0
394394
// INT: [[or1:%[0-9]*]] = or [[ELTY]] [[val3]], [[val2]]
395395
// INT: [[res1:%.*]] = insertelement [[TYPE]] undef, [[ELTY]] [[or1]], i32 0
396396
// INT: store [[TYPE]] [[res1]], [[TYPE]]* [[adr1]]
397397
things[1] = things[2] | things[3];
398398

399-
// INT: [[adr4:%[0-9]*]] = getelementptr inbounds [11 x [[TYPE]]], [11 x [[TYPE]]]* %things, i32 0, i32 4
399+
// INT: [[adr4:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 4
400400
// INT: [[ld4:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr4]]
401401
// INT: [[val4:%[0-9]*]] = extractelement [[TYPE]] [[ld4]], i32 0
402402
// INT: [[and2:%[0-9]*]] = and [[ELTY]] [[val4]], [[val3]]
403403
// INT: [[res2:%.*]] = insertelement [[TYPE]] undef, [[ELTY]] [[and2]], i32 0
404404
// INT: store [[TYPE]] [[res2]], [[TYPE]]* [[adr2]]
405405
things[2] = things[3] & things[4];
406406

407-
// INT: [[adr5:%[0-9]*]] = getelementptr inbounds [11 x [[TYPE]]], [11 x [[TYPE]]]* %things, i32 0, i32 5
407+
// INT: [[adr5:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 5
408408
// INT: [[ld5:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr5]]
409409
// INT: [[val5:%[0-9]*]] = extractelement [[TYPE]] [[ld5]], i32 0
410410
// INT: [[xor3:%[0-9]*]] = xor [[ELTY]] [[val5]], [[val4]]
411411
// INT: [[res3:%.*]] = insertelement [[TYPE]] undef, [[ELTY]] [[xor3]], i32 0
412412
// INT: store [[TYPE]] [[res3]], [[TYPE]]* [[adr3]]
413413
things[3] = things[4] ^ things[5];
414414

415-
// INT: [[adr6:%[0-9]*]] = getelementptr inbounds [11 x [[TYPE]]], [11 x [[TYPE]]]* %things, i32 0, i32 6
415+
// INT: [[adr6:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 6
416416
// INT: [[ld6:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr6]]
417417
// INT: [[val6:%[0-9]*]] = extractelement [[TYPE]] [[ld6]], i32 0
418418
// INT: [[shv6:%[0-9]*]] = and [[ELTY]] [[val6]]
@@ -421,7 +421,7 @@ export void bittwiddlers(inout TYPE things[11]) {
421421
// INT: store [[TYPE]] [[res4]], [[TYPE]]* [[adr4]]
422422
things[4] = things[5] << things[6];
423423

424-
// INT: [[adr7:%[0-9]*]] = getelementptr inbounds [11 x [[TYPE]]], [11 x [[TYPE]]]* %things, i32 0, i32 7
424+
// INT: [[adr7:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 7
425425
// INT: [[ld7:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr7]]
426426
// INT: [[val7:%[0-9]*]] = extractelement [[TYPE]] [[ld7]], i32 0
427427
// INT: [[shv7:%[0-9]*]] = and [[ELTY]] [[val7]]
@@ -431,30 +431,49 @@ export void bittwiddlers(inout TYPE things[11]) {
431431
// INT: store [[TYPE]] [[res5]], [[TYPE]]* [[adr5]]
432432
things[5] = things[6] >> things[7];
433433

434-
// INT: [[adr8:%[0-9]*]] = getelementptr inbounds [11 x [[TYPE]]], [11 x [[TYPE]]]* %things, i32 0, i32 8
434+
// INT: [[adr8:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 8
435435
// INT: [[ld8:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr8]]
436436
// INT: [[val8:%[0-9]*]] = extractelement [[TYPE]] [[ld8]], i32 0
437437
// INT: [[or6:%[0-9]*]] = or [[ELTY]] [[val8]], [[val6]]
438438
// INT: [[res6:%.*]] = insertelement [[TYPE]] undef, [[ELTY]] [[or6]], i32 0
439439
// INT: store [[TYPE]] [[res6]], [[TYPE]]* [[adr6]]
440440
things[6] |= things[8];
441441

442-
// INT: [[adr9:%[0-9]*]] = getelementptr inbounds [11 x [[TYPE]]], [11 x [[TYPE]]]* %things, i32 0, i32 9
442+
// INT: [[adr9:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 9
443443
// INT: [[ld9:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr9]]
444444
// INT: [[val9:%[0-9]*]] = extractelement [[TYPE]] [[ld9]], i32 0
445445
// INT: [[and7:%[0-9]*]] = and [[ELTY]] [[val9]], [[val7]]
446446
// INT: [[res7:%.*]] = insertelement [[TYPE]] undef, [[ELTY]] [[and7]], i32 0
447447
// INT: store [[TYPE]] [[res7]], [[TYPE]]* [[adr7]]
448448
things[7] &= things[9];
449449

450-
// INT: [[adr10:%[0-9]*]] = getelementptr inbounds [11 x [[TYPE]]], [11 x [[TYPE]]]* %things, i32 0, i32 10
450+
// INT: [[adr10:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 10
451451
// INT: [[ld10:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr10]]
452452
// INT: [[val10:%[0-9]*]] = extractelement [[TYPE]] [[ld10]], i32 0
453453
// INT: [[xor8:%[0-9]*]] = xor [[ELTY]] [[val10]], [[val8]]
454454
// INT: [[res8:%.*]] = insertelement [[TYPE]] undef, [[ELTY]] [[xor8]], i32 0
455455
// INT: store [[TYPE]] [[res8]], [[TYPE]]* [[adr8]]
456456
things[8] ^= things[10];
457457

458+
// INT: [[adr11:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 11
459+
// INT: [[ld11:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr11]]
460+
// INT: [[val11:%[0-9]*]] = extractelement [[TYPE]] [[ld11]], i32 0
461+
// INT: [[shv11:%[0-9]*]] = and [[ELTY]] [[val11]]
462+
// INT: [[shl9:%[0-9]*]] = shl [[ELTY]] [[val9]], [[shv11]]
463+
// INT: [[res9:%.*]] = insertelement [[TYPE]] undef, [[ELTY]] [[shl9]], i32 0
464+
// INT: store [[TYPE]] [[res9]], [[TYPE]]* [[adr9]]
465+
things[9] <<= things[11];
466+
467+
// INT: [[adr12:%[0-9]*]] = getelementptr inbounds [13 x [[TYPE]]], [13 x [[TYPE]]]* %things, i32 0, i32 12
468+
// INT: [[ld12:%[0-9]*]] = load [[TYPE]], [[TYPE]]* [[adr12]]
469+
// INT: [[val12:%[0-9]*]] = extractelement [[TYPE]] [[ld12]], i32 0
470+
// INT: [[shv12:%[0-9]*]] = and [[ELTY]] [[val12]]
471+
// UNSIG: [[shr10:%[0-9]*]] = lshr [[ELTY]] [[val10]], [[shv12]]
472+
// SIG: [[shr10:%[0-9]*]] = ashr [[ELTY]] [[val10]], [[shv12]]
473+
// INT: [[res10:%.*]] = insertelement [[TYPE]] undef, [[ELTY]] [[shr10]], i32 0
474+
// INT: store [[TYPE]] [[res10]], [[TYPE]]* [[adr10]]
475+
things[10] >>= things[12];
476+
458477
// INT: ret void
459478
}
460479
#endif // INT

tools/clang/test/CodeGenDXIL/hlsl/types/longvec-operators.hlsl

Lines changed: 87 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
// RUN: %dxc -HV 2018 -T lib_6_9 -DTYPE=float -DNUM=128 %s | FileCheck %s --check-prefixes=CHECK,NODBL
1919

2020
// Less exhaustive testing for some other types.
21-
// RUN: %dxc -HV 2018 -T lib_6_9 -DTYPE=int -DNUM=2 %s | FileCheck %s --check-prefixes=CHECK,NODBL
22-
// RUN: %dxc -HV 2018 -T lib_6_9 -DTYPE=uint -DNUM=5 %s | FileCheck %s --check-prefixes=CHECK,NODBL
21+
// RUN: %dxc -HV 2018 -T lib_6_9 -DTYPE=int -DNUM=2 -DINT %s | FileCheck %s --check-prefixes=CHECK,NODBL,INT,SIG
22+
// RUN: %dxc -HV 2018 -T lib_6_9 -DTYPE=uint -DNUM=5 -DINT %s | FileCheck %s --check-prefixes=CHECK,NODBL,INT,UNSIG
2323
// RUN: %dxc -HV 2018 -T lib_6_9 -DTYPE=double -DNUM=3 -DDBL %s | FileCheck %s --check-prefixes=CHECK,DBL
24-
// RUN: %dxc -HV 2018 -T lib_6_9 -DTYPE=uint64_t -DNUM=9 %s | FileCheck %s --check-prefixes=CHECK,NODBL
24+
// RUN: %dxc -HV 2018 -T lib_6_9 -DTYPE=uint64_t -DNUM=9 -DINT %s | FileCheck %s --check-prefixes=CHECK,NODBL,INT,UNSIG
2525
// RUN: %dxc -HV 2018 -T lib_6_9 -DTYPE=float16_t -DNUM=17 -enable-16bit-types %s | FileCheck %s --check-prefixes=CHECK,NODBL
26-
// RUN: %dxc -HV 2018 -T lib_6_9 -DTYPE=int16_t -DNUM=177 -enable-16bit-types %s | FileCheck %s --check-prefixes=CHECK,NODBL
26+
// RUN: %dxc -HV 2018 -T lib_6_9 -DTYPE=int16_t -DNUM=177 -DINT -enable-16bit-types %s | FileCheck %s --check-prefixes=CHECK,NODBL,INT,SIG
2727

2828
// Test relevant operators on an assortment vector sizes and types with 6.9 native vectors.
2929

@@ -496,3 +496,86 @@ export vector<TYPE, NUM> index(vector<TYPE, NUM> things[10], int i, TYPE val)[10
496496
// CHECK: ret void
497497
return res;
498498
}
499+
500+
#ifdef INT
501+
// Test bit twiddling operators.
502+
// INT-LABEL: define void @"\01?bittwiddlers
503+
export void bittwiddlers(inout vector<TYPE, NUM> things[13]) {
504+
// INT: [[adr1:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 1
505+
// INT: [[ld1:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr1]]
506+
// INT: [[res1:%[0-9]*]] = xor <[[NUM]] x [[TYPE]]> [[ld1]], <[[TYPE]] -1
507+
// INT: [[adr0:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 0
508+
// INT: store <[[NUM]] x [[TYPE]]> [[res1]], <[[NUM]] x [[TYPE]]>* [[adr0]]
509+
things[0] = ~things[1];
510+
511+
// INT: [[adr2:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 2
512+
// INT: [[ld2:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr2]]
513+
// INT: [[adr3:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 3
514+
// INT: [[ld3:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr3]]
515+
// INT: [[res1:%[0-9]*]] = or <[[NUM]] x [[TYPE]]> [[ld3]], [[ld2]]
516+
// INT: store <[[NUM]] x [[TYPE]]> [[res1]], <[[NUM]] x [[TYPE]]>* [[adr1]]
517+
things[1] = things[2] | things[3];
518+
519+
// INT: [[adr4:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 4
520+
// INT: [[ld4:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr4]]
521+
// INT: [[res2:%[0-9]*]] = and <[[NUM]] x [[TYPE]]> [[ld4]], [[ld3]]
522+
// INT: store <[[NUM]] x [[TYPE]]> [[res2]], <[[NUM]] x [[TYPE]]>* [[adr2]]
523+
things[2] = things[3] & things[4];
524+
525+
// INT: [[adr5:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 5
526+
// INT: [[ld5:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr5]]
527+
// INT: [[res3:%[0-9]*]] = xor <[[NUM]] x [[TYPE]]> [[ld4]], [[ld5]]
528+
// INT: store <[[NUM]] x [[TYPE]]> [[res3]], <[[NUM]] x [[TYPE]]>* [[adr3]]
529+
things[3] = things[4] ^ things[5];
530+
531+
// INT: [[adr6:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 6
532+
// INT: [[ld6:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr6]]
533+
// INT: [[shv6:%[0-9]*]] = and <[[NUM]] x [[TYPE]]> [[ld6]]
534+
// INT: [[res4:%[0-9]*]] = shl <[[NUM]] x [[TYPE]]> [[ld5]], [[shv6]]
535+
// INT: store <[[NUM]] x [[TYPE]]> [[res4]], <[[NUM]] x [[TYPE]]>* [[adr4]]
536+
things[4] = things[5] << things[6];
537+
538+
// INT: [[adr7:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 7
539+
// INT: [[ld7:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr7]]
540+
// INT: [[shv7:%[0-9]*]] = and <[[NUM]] x [[TYPE]]> [[ld7]]
541+
// UNSIG: [[res5:%[0-9]*]] = lshr <[[NUM]] x [[TYPE]]> [[ld6]], [[shv7]]
542+
// SIG: [[res5:%[0-9]*]] = ashr <[[NUM]] x [[TYPE]]> [[ld6]], [[shv7]]
543+
// INT: store <[[NUM]] x [[TYPE]]> [[res5]], <[[NUM]] x [[TYPE]]>* [[adr5]]
544+
things[5] = things[6] >> things[7];
545+
546+
// INT: [[adr8:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 8
547+
// INT: [[ld8:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr8]]
548+
// INT: [[res6:%[0-9]*]] = or <[[NUM]] x [[TYPE]]> [[ld8]], [[ld6]]
549+
// INT: store <[[NUM]] x [[TYPE]]> [[res6]], <[[NUM]] x [[TYPE]]>* [[adr6]]
550+
things[6] |= things[8];
551+
552+
// INT: [[adr9:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 9
553+
// INT: [[ld9:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr9]]
554+
// INT: [[res7:%[0-9]*]] = and <[[NUM]] x [[TYPE]]> [[ld9]], [[ld7]]
555+
// INT: store <[[NUM]] x [[TYPE]]> [[res7]], <[[NUM]] x [[TYPE]]>* [[adr7]]
556+
things[7] &= things[9];
557+
558+
// INT: [[adr10:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 10
559+
// INT: [[ld10:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr10]]
560+
// INT: [[res8:%[0-9]*]] = xor <[[NUM]] x [[TYPE]]> [[ld8]], [[ld10]]
561+
// INT: store <[[NUM]] x [[TYPE]]> [[res8]], <[[NUM]] x [[TYPE]]>* [[adr8]]
562+
things[8] ^= things[10];
563+
564+
// INT: [[adr11:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 11
565+
// INT: [[ld11:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr11]]
566+
// INT: [[shv11:%[0-9]*]] = and <[[NUM]] x [[TYPE]]> [[ld11]]
567+
// INT: [[res9:%[0-9]*]] = shl <[[NUM]] x [[TYPE]]> [[ld9]], [[shv11]]
568+
// INT: store <[[NUM]] x [[TYPE]]> [[res9]], <[[NUM]] x [[TYPE]]>* [[adr9]]
569+
things[9] <<= things[11];
570+
571+
// INT: [[adr12:%[0-9]*]] = getelementptr inbounds [13 x <[[NUM]] x [[TYPE]]>], [13 x <[[NUM]] x [[TYPE]]>]* %things, i32 0, i32 12
572+
// INT: [[ld12:%[0-9]*]] = load <[[NUM]] x [[TYPE]]>, <[[NUM]] x [[TYPE]]>* [[adr12]]
573+
// INT: [[shv12:%[0-9]*]] = and <[[NUM]] x [[TYPE]]> [[ld12]]
574+
// UNSIG: [[res10:%[0-9]*]] = lshr <[[NUM]] x [[TYPE]]> [[ld10]], [[shv12]]
575+
// SIG: [[res10:%[0-9]*]] = ashr <[[NUM]] x [[TYPE]]> [[ld10]], [[shv12]]
576+
// INT: store <[[NUM]] x [[TYPE]]> [[res10]], <[[NUM]] x [[TYPE]]>* [[adr10]]
577+
things[10] >>= things[12];
578+
579+
// INT: ret void
580+
}
581+
#endif // INT

0 commit comments

Comments
 (0)